2017-04-11 20 views
0

그래서 내가 직면하고있는 문제는 내 데이터 구조 클래스 constructor 작품은 내가 parameters의 가변 길이로 클래스를 선언 할 수 있다는 것입니다 :C++ 템플릿 가변 인자 클래스 매개 변수 팩 작업 생성자하지만 기능하지

template<class T> 
class Dynarray 
{ 
    private: 
     int size; 
    public: 
     template<class T, typename... Arguments> 
     Dynarray(T item,Arguments...) 
     { 
      size = sizeof...(Arguments); 
     } 
} 

그러나 경우 나는 추가 공개 멤버 함수 그래서 난과 같이 클래스에 더 추가 할 수 있습니다 추가

:

template<class T> 
class Dynarray 
{ 
    private: 
     int size; 
    public: 
     template<class T, typename... Arguments> 
     Dynarray(T item,Arguments...) 
     { 
      size = sizeof...(Arguments); 
     } 
     ///////////////////////////////////////////////////////// 
     template<class T, typename... Arguments> 
     void Dynarray<T>::AddGroup(T item, Arguments...) 
     { //Errors C2838, C2059, C2334 

      size += sizeof...(Arguments); 

     } 
     ///////////////////////////////////////////////////////// 
} 

나는 에러 코드를 얻을

C2838 'AddGroup': illegal qualified name in member declaration

C2059 syntax error: '{'

C2334 unexpected token(s) preceding '{'; skipping apparent function body

클래스 템플릿이 올 때 ConstructorsMember Functions 사이에 차이가 있습니까? 해결 방법에 대해 알고 있습니까?

클래스 정의 내부

답변

3

, 당신은 Dynarray<T> 반복해서는 안 : 그래서 그것이 있어야 :

template<typename... Arguments> 
void AddGroup(T item, Arguments...) 
{ 
    size += sizeof...(Arguments); 
} 

(나는 이미 클래스에 존재하는 중복 typename T를 제거합니다.)

+1

는에 노력하고 지난 주 거의 직행이 아니며 방금 내 생명을 구했습니다. 정말 고맙습니다! –