2015-10-29 185 views
-2

我写了一个C++程序,当我编译它,我得到这个警告,无论我打电话Vector3* center = new Vector3(),其实无论我打电话的Vector3()构造函数:C++警告非静态数据成员初始化

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.

+2

[维基百科上的C++ 11](https://en.wikipedia.org/wiki/C%2B%2B11)。此外,您的编译器消息明确指出如何解决该问题。 – Drop

+3

警告来自一个完全不同的地方(它必须在main.cpp中,因为你只编译两个文件)。 – dasblinkenlight

+0

@kalahari我甚至没有看到你的代码中有这样的一个声明,像这样Vector3 * v = new Vector3(): –

回答

0

该错误消息暗示这条线进行测试
Vector3* center = new Vector3();
直接在类定义中。该行在函数定义内部是可以的(即使函数定义在类定义内)。

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

如果一切是你预期什么,那里面class whatever {你需要改变的center的声明只是Vector3* center;,然后你需要从像whatever::whatever(...) {编辑whatever每一个构造函数whatever::whatever(...) : center(new Vector3()) {

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

+0

谢谢,我现在明白了。 – kalahari