我编写了一个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的部门计算机上进行测试。
答案 0 :(得分:0)
错误消息暗示此行
Vector3* center = new Vector3();
直接在类定义中。在函数定义中,该行是可以的(即使函数定义在类定义中)。
您是否打算将该行直接放在一个类中?这意味着center
是该类的成员,并且new Vector3()
将默认由该类的每个构造函数执行(但仅限于C ++ 11或更高版本)。
如果这一切都符合您的意图,那么在class whatever {
内您需要将center
的声明更改为Vector3* center;
,然后您需要编辑{{1}的每个构造函数从whatever
到whatever::whatever(...) {
但是,如果您没有打算将whatever::whatever(...) : center(new Vector3()) {
定义为定义类的成员(如果您打算在函数中定义局部变量),请查看和/或发布上下文该行,以便您可以得到更明智的答案。