2013-08-16 3 views
-1

Class.hC++ 템플릿, 함수가 클래스에서 정의합니까?

template<class T> 
    struct AStruct 
    { 
    //stuff 
    }; 

class aClass 
{ 
    template<class T> 
    void setStruct(const AStruct<T>& s) 
    { 
    theStruct = s; 
    } 

private: 
    template<class T> 
    AStruct<T> theStruct; //this is not liked. "multiple template parameter lists are not allowed" are one of the errors I get... 
}; 

아주 엉망하지만 여전히, 내가 무엇을 그것에 대해 할 수있는 알고 싶습니다 ... 난 또 ... 조금 주위하지만 행운을 가지고 노는 시도했습니다, 표준 라이브러리 만주세요!

+0

실제로 질문하지 않았습니다. – Dan

+0

T가 무엇인지 모르는 경우 생성자가 TheStruct를 만드는 방법은 무엇입니까? 템플릿이 필요한 변수가 있으면 전체 클래스를 템플릿으로 만들어야합니다. – andre

+0

불행합니다. 나는 다른 방법이 있기를 바랐다. : ( – optional

답변

2

당신은 클래스 템플릿 인 멤버를 유지하는 경우는 다음 중 하나가 클래스 템플릿이 필요 템플릿으로 AStruct을 정의 또는 제거 템플릿 매개 변수에 대한 유형을 제공해야합니다. 이전이 필요한 것 같습니다 :

template<class T> 
class aClass 
{ 
    void setStruct(const AStruct<T>& s){ 
    theStruct = s; 
    } 

private: 
    AStruct<T> theStruct; // data member is class template 
}; 
+0

정답으로 선택하기위한 동기 : 귀하와 Andre가 모두 같은 대답을 갖고있는 것처럼 보입니다. 조차도 대답했다. 같은 시간에 공정성을 위해이 대답은 머리 또는 꼬리를 던짐으로써 선택되었습니다. – optional

2

당신은 이미 template<class T>

template<class T> 
struct AStruct{ 
//stuff 
}; 

template<class T> 
class aClass{ 

void setStruct(const AStruct<T>& s){ 
    theStruct = s; 
} 

private: 
AStruct<T> theStruct; 
}; 

+0

컴파일 타임에 실제로 T가 무엇인지 알지 못합니다. 그래서 제거하면 그것은 "식별자"T "가 정의되지 않았다"라고 말할 것입니다, – optional

+1

하지만 존재하지 않는 타입'T'에 대해'AStruct'를 인스턴스화하려고합니다. 기존 타입이나'aClass' 자체에 대해 인스턴스화되어야합니다 –

+0

@MikeSeymour가 내 게시물을 개선했습니다. 내 속보를 취소하십시오. –

4
template<class T> 
struct AStruct{ 
}; 

template<class T>   //<-- the template must be here 
class aClass { 
public: 
    void setStruct(const AStruct<T>& s){ 
     theStruct = s; 
    } 
private: 
    AStruct<T> theStruct; //<-- To construct this variable 
}; 
관련 문제