【问题标题】:non-static data member initializers c++非静态数据成员初始化器 C++
【发布时间】:2014-10-13 23:35:18
【问题描述】:
non-static data member initializers only available with -std=c++11 or -std=gnu++11 
[enabled by default]
     int Red = 255;
non-static data member initializers only available with -std=c++11 or -std=gnu++11
[enabled by default]
     int Green = 255;
non-static data member initializers only available with -std=c++11 or -std=gnu++11 
[enabled by default]
     int Blue = 255;

不知道为什么这不起作用。

struct color {
    int Red = 255;
    int Green = 255;
    int Blue = 255;
};

【问题讨论】:

  • 我认为你应该听从编译器的建议。
  • 当您得到答案时,您应该选择回答您问题的那个,然后单击复选标记。我看到您没有针对您提出的任何问题这样做。

标签: c++ c++11 non-static data-members


【解决方案1】:

启用 c++11 或:

struct Color
{
    int Red;
    int Green;
    int Blue;
    Color() : Red(255), Green(255), Blue(255) {}
};

【讨论】:

    【解决方案2】:

    非静态数据成员初始化器是仅存在于 C++11 版本语言规范的功能。默认情况下,您使用的编译器无法在 C++11 模式下运行。为了将编译器切换到 C++11 模式,您必须指定 -std=c++11(或 -std=gnu++11)命令行选项。这就是你的编译器告诉你的(很明确,我可能会补充)。

    在 C++11 之前的语言版本中没有这样的功能。这就是它“不起作用”的原因。

    【讨论】:

      【解决方案3】:

      您需要启用 C++ 11 或添加 -std=c++11 标志进行编译,因为您尝试执行的操作仅在 C++11 中可用

      【讨论】:

        【解决方案4】:

        在 C++11 之前,您只能在构造函数的成员初始化器列表中初始化非静态数据成员。在 C++11 中,您可以使用大括号或等号初始化程序,如代码中所示。但是,如果您的 NSDM 有一个大括号或等号初始化程序并出现在成员初始化程序列表中,则该大括号或等号初始化程序将被忽略。因此,以下内容适用于 C++03 和 C++11:

        struct Color
        {
            int Red;
            int Green;
            int Blue;
            Color() : Red(255), Green(255), Blue(255) {}
        };
        

        但是,由于您有 C++11 就绪的编译器,请使用 -std=c++11 启用它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-04
          • 2011-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多