2013-10-02 2 views
3

저는 C++을 처음 사용하고 x 코드로 컴파일 할 오픈 소스 C++ 프로젝트를 얻으려고합니다. 이 코드의 마지막 두 줄은 : 멤버 이니셜 라이저가 비 정적 데이터 멤버 이름을 지정하지 않았습니다.

template<typename T> 
struct TVector3 : public TVector2<T> { 
    T z; 
TVector3(T _x = 0.0, T _y = 0.0, T _z = 0.0) 
    : TVector2(_x, _y), z(_z) 

오류를 던지고있다 : 회원 이니셜 ( member initializer does not name a non-static data member or base class), 나는이에 코드를 변경 시도를 바탕으로 비 정적 데이터 멤버

이름을하지 않습니다

template<typename T> 
struct TVector3 : public TVector2<T> { 
    T z; 
TVector3(T _x = 0.0, T _y = 0.0, T _z = 0.0) 
    : TVector2(_x, _y) 
{ z(_z);} 

하지만 같은 오류가 발생합니다. 다음은 수퍼 클래스 인 Vector2 용 코드입니다. 이 오류를 어떻게 해결할 수 있습니까?

struct TVector2 { 
    T x, y; 
    TVector2(T _x = 0.0, T _y = 0.0) 
     : x(_x), y(_y) 
    {} 
    double Length() const { 
     return sqrt(static_cast<double>(x*x + y*y)); 
    } 
    double Norm(); 
    TVector2<T>& operator*=(T f) { 
     x *= f; 
     y *= f; 
     return *this; 
    } 
    TVector2<T>& operator+=(const TVector2<T>& v) { 
     x += v.x; 
     y += v.y; 
     return *this; 
    } 
    TVector2<T>& operator-=(const TVector2<T>& v) { 
     x -= v.x; 
     y -= v.y; 
     return *this; 
    } 
}; 

답변

8

클래스 템플릿 내에서는 템플릿 인수없이 자체 이름 만 삽입하여 사용합니다. 필요한 항목 :

template<typename T> 
struct TVector3 : public TVector2<T> { 
    T z; 
TVector3(T _x = 0.0, T _y = 0.0, T _z = 0.0) 
    : TVector2<T>(_x, _y), z(_z) 
관련 문제