C ++警告非静态数据成员初始值设定项

时间:2015-10-29 14:24:14

标签: c++ g++ gcc-warning non-static

我编写了一个C ++程序,当我编译它时,无论我在哪里调用Vector3* center = new Vector3(),我都会收到此警告,实际上我称之为Vector3()构造函数:

warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default] Vector3* center = new Vector3();

这是我的 Vector3.h:

class Vector3  {
private:
    float x;
    float y;
    float z;

public:

    // Constructors & Destructor
    Vector3(float x,float y,float z);
    Vector3();
    ~Vector3(){}
    // getters & setters & some other functions
};

我的 Vector3.cpp:

#include "vector3.h"

Vector3::Vector3(){
    this->x = 0.0;
    this->y = 0.0;
    this->z = 0.0;
}

Vector3::Vector3(float x,float y,float z)
{
    this->x = x;
    this->y = y;
    this->z = z;
}
// others

我的编译命令如下:

g++ -O2 main.cpp vector3.cpp

完全删除Vector3()构造函数并调用Vector3* v = new Vector3(0.0, 0.0, 0.0)也没有用,我收到同样的警告。

我该如何解决这个问题?

编辑:这是一个功课,我不能使用C ++ 11.这个程序将在没有C ++ 11的部门计算机上进行测试。

1 个答案:

答案 0 :(得分:0)

错误消息暗示此行
Vector3* center = new Vector3();
直接在类定义中。在函数定义中,该行是可以的(即使函数定义在类定义中)。

您是否打算将该行直接放在一个类中?这意味着center是该类的成员,并且new Vector3()将默认由该类的每个构造函数执行(但仅限于C ++ 11或更高版本)。

如果这一切都符合您的意图,那么在class whatever {内您需要将center的声明更改为Vector3* center;,然后您需要编辑{{1}的每个构造函数从whateverwhatever::whatever(...) {

之类的东西

但是,如果您没有打算将whatever::whatever(...) : center(new Vector3()) {定义为定义类的成员(如果您打算在函数中定义局部变量),请查看和/或发布上下文该行,以便您可以得到更明智的答案。