【问题标题】:Member initializer does not name a non-static data member成员初始值设定项不命名非静态数据成员
【发布时间】:2013-10-02 12:14:52
【问题描述】:

我是 C++ 新手,并试图让一个开源 C++ 项目在 x 代码中编译。这段代码的最后两行:

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;
    }
};

【问题讨论】:

    标签: c++


    【解决方案1】:

    在类模板中,只注入它自己的名称以供在没有模板参数的情况下使用。你需要这个:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2011-12-02
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多