我在一个类中声明并初始化了一个常量char数组:
class grid {
const char test[11] = {'s', 'e', '1', '2', '3', '4', '5', '6', '7', '8', '9'};我的代码正常工作,但我一直收到编译器警告:
非静态数据成员初始化器只能与C++11一起使用
和
扩展初始化程序列表仅适用于C++11
我知道这不是一个问题,因为我正在编译到C++11标准,但我很好奇我的代码的预C++11是什么。
我希望有人能给我一些洞察力,并建议我能做些什么来使这个代码C++98“友好”。
也是根据请求,我的编译器命令:
> g++ -o test main.cpp发布于 2014-06-24 19:08:25
您需要使用-std=c++11编译(用于gcc和clang)。如果不这样做,将检查程序和旧的C++98标准,以确保与旧编译器的兼容性。
因此,它允许您在不带标志的情况下使用C++11特性,但同时警告您,这样您就不会意外地使用它。
进一步解释:
您的代码编译良好,因为它是合法代码,编译器可以编译它。编译器省略了一个警告,让您意识到您使用了C++11特性,因为许多人(比如我的大学,不幸的是)仍然使用过时的编译器,如gcc4.6,还没有完全的C++11支持。这意味着这些人可能无法编译您可能关心的代码(例如,您的教授需要编译您的作业)。
使用-std=c++11标志,您可以告诉编译器“这是一个C++11程序,用于使用符合C++11的编译器进行编译”。这样,警告就变得多余了。
发布于 2014-06-24 19:09:30
要使它与C++98兼容,需要在类声明之外初始化非静态类常量。
https://stackoverflow.com/questions/24394319
复制相似问题