我使用的是动态分配的首次,而编译器给了我这个警告,我无法找到其他地方:警告时动态分配内存
warning: non-static data member initializers only available with
-std=c++11 or -std=gnu++11
有没有办法让它desappear?我应该在乎吗? 谢谢!
我使用的是动态分配的首次,而编译器给了我这个警告,我无法找到其他地方:警告时动态分配内存
warning: non-static data member initializers only available with
-std=c++11 or -std=gnu++11
有没有办法让它desappear?我应该在乎吗? 谢谢!
问题:
它无关动态分配。
您可能正在使用的这种方法的数据成员初始化它们是C++ 11第一部分:
class S
{
int n; // non-static data member
int& r; // non-static data member of reference type
int a[10] = {1, 2}; // non-static data member with initializer (C++11)
std::string s, *ps; // two non-static data members
struct NestedS {
std::string s;
} d5, *d6; // two non-static data members of nested type
char bit : 2; // two-bit bitfield
};
编译器告诉你,你正在使用的功能(非静态数据成员初始值设定项)只存在于C++ 11(及以上版本)中。
解决问题:
-std=c++11
标志编译代码。我应该在意吗?
当然,是的。不注意警告可能会导致许多问题,如溢出和未定义的行为。
我对-std = C++ 11标志一无所知,我会坚决使用它!谢谢! –
总是关心警告!警告是有用的,事实上,你应该总是编译-Werror
。
,是警告你,你在预先C++编译11,但在你的代码使用的是C++ 11级初始化:
struct foo {
int i = 0; // initialization of non-static POD
};
你有-std=c++11
编译,或停止使用该功能并在构造函数中初始化数据成员。
除了警告,你需要发布代码导致这一点。 –
“-std = C++ 11”的哪部分不清楚? –
是的,你应该关心警告。在为编译命令盲目添加一个标志以使警告消失之前,您应该了解编译器警告的问题的性质。 –