【问题标题】:How to deal with [-Wc++11-extensions] in the text editor如何在文本编辑器中处理[-Wc++11-extensions]
【发布时间】:2018-11-03 03:47:46
【问题描述】:

当我尝试将 myCurrentTry 初始化为 1 并将 myMaxTries 初始化为 5 时遇到警告,错误是:

非静态数据成员的类内初始化是 C++11 扩展 [-Wc++11-extensions]

实现这一点的代码是:

class starUFO{
public:
    void Reset();
    int getMaxTries();
    int getCurrentTry();
    bool isGameWon();
    bool checkGuessValidity(string);
private:
    int myCurrentTry = 1;
    int myMaxTries = 5;
};

我听说有人说“尝试使用 -std=c++11 进行编译”,这确实消除了我命令行中的警告,但我想修复 VS Code 配置,因此它不会将此视为警告,我有最新的 VS Code,但似乎有更深层次的问题。

【问题讨论】:

  • 写一个构造函数并在那里初始化你的成员变量。
  • @SidS 他想使用 C++11 功能,他只是想告诉 VSCode 在编译时传递正确的选项。
  • github.com/Microsoft/vscode-cpptools/blob/master/Documentation/… 查看 cppStandard 选项。我以前没用过,所以我不会给出完整的答案。
  • @Brittany 所以重新表述这个问题,在 VSCode 中编译时如何传递-std=c++11 参数
  • 您的问题令人困惑。首先,您询问如何“解决 vscode 本身的问题”。然后你问如何“在代码本身中修复这个警告”。您要修复代码还是 VS Code 配置?

标签: c++ macos visual-studio-code gcc-warning


【解决方案1】:

要告诉 VSCode 您正在使用哪个 C++ 标准,请打开命令面板 (Ctrl+Shift+P),选择“C/C++:编辑配置 (UI)”,向下滚动并更改“C++ 标准”下拉菜单。在这种情况下,请选择“c++11”或更高版本。

这假设您使用的是“IntelliSense”引擎,而不是旧的“Tag Parser”引擎:转到 File → Preferences → Settings → C/C++ → “C_Cpp: Intelli Sense Engine”,并确保已设置改为“默认”。

这些选项存在于 VSCode 1.37.1 和 C/C++ extension 0.25.1(又名“cpptools”)中。我不知道他们是什么时候介绍的。

【讨论】:

    【解决方案2】:

    编写一个构造函数并在那里初始化你的成员变量:

    class starUFO
    {
        private:
            int myCurrentTry;
            int myMaxTries;
    
        public:
            starUFO()
            :   myCurrentTry(1),
                myMaxTries(5)
            {
            }
    
            ...
    };
    

    【讨论】:

    • 他不想停止使用这个功能,他想用启用它而不打印警告的选项来编译它。
    • @Barmar,让我们听听这么说吧。
    • 他做到了:我听说有人说“尝试使用 -std=c++11 进行编译,这确实消除了我命令行中的警告,但我想解决 vscode 本身的问题.
    • @Barmar,这仍然是你的解释。她还说“有什么方法可以在代码本身中修复这个警告吗?”
    • 他添加了一条评论来解释他想要什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多