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

C++ warning non-static data member initializers

我写了一个 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 的部门计算机上进行测试。

错误信息暗示这一行
Vector3* center = new Vector3();
直接在 class 定义中。该行在函数定义内是可以的(即使函数定义在 class 定义内)。

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

如果这一切都是您想要的,那么在 class whatever { 中您需要将 center 的声明更改为 Vector3* center; 然后您需要编辑 Vector3* center; 的每个构造函数=16=] 从 whatever::whatever(...) {whatever::whatever(...) : center(new Vector3()) {

但是,如果您不打算将 center 的定义定义为 class 的成员(如果您打算将其定义为函数中的局部变量),请查看 and/or post 该行的上下文,以便您可以获得更明智的答案。