我写了一个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
的定义定义为定义类的成员(如果您打算将其定义为函数中的局部变量),请查看和/或发布该行的上下文,以便获得更明智的答案。