2013-10-02 1 views
3

Я новичок в C++ и пытаюсь получить проект C++ с открытым кодом для компиляции в x-коде. Последние две строки этого кода:Member initializer не называет нестатический член данных

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) 
Смежные вопросы