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();
直接在类定义中。这一行在函数定义中是可以的(即使函数定义在类定义中)。
你打算把那条线直接放在一个班级里吗?这意味着center
是该类的成员,默认情况下new Vector3()
将由该类的每个构造函数执行(但仅在C++11中或更高版本中执行)。
如果所有这些都是您想要的,那么在class whatever {
中,您需要将center
的声明更改为Vector3* center;
,然后您需要编辑whatever
的每个构造函数,从whatever::whatever(...) {
到whatever::whatever(...) : center(new Vector3()) {
但是,如果您不打算将center
的定义定义为定义类的成员(如果您打算将其定义为函数中的局部变量),请查看和/或发布该行的上下文,以便获得更明智的答案。
- 指定的初始化程序
- 错误:为函数__THROW__asm提供了初始化程序
- C++引物动态数组初始化程序的数目超过大小
- 在C++初始化程序列表中使用Integer Literals
- 当指定初始化程序的顺序和字段声明不一致时,clang可以删除函数调用
- 模板非静态数据成员初始化程序何时实例化
- C++-数组的初始化程序太多
- 类的头文件中的C++初始化程序列表
- std::array不再发生初始化程序语法错误
- C++初始化程序上的Cortex M4硬故障
- 初始化程序列表
- 添加大数字C++-初始化程序失败
- 避免对自定义类使用初始化程序列表
- rvalue作为初始化程序来构造对象
- 数组的初始化程序太多错误
- 自定义矢量类模板初始化程序失败
- 初始化程序列表和赋值重载(运算符=)
- 引用包装的初始化程序列表
- 结构:初始化程序出错
- c++初始化程序列表