C++警告非静态数据成员初始化程序

C++ warning non-static data member initializers

本文关键字:初始化 程序 数据成员 静态 警告 C++      更新时间:2023-10-16

我写了一个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();
直接在类定义中。这一行在函数定义中是可以的(即使函数定义在类定义中)。

你打算把那条线直接放在一个班级里吗?这意味着center是该类的成员,默认情况下new Vector3()将由该类的每个构造函数执行(但仅在C++11中或更高版本中执行)。

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

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