【问题标题】:C++ error: a brace-enclosed initializer is not allowed here before ‘{’ tokenC++ 错误:在“{”标记之前不允许使用大括号括起来的初始值设定项
【发布时间】:2015-08-11 23:01:49
【问题描述】:

简单的问题:

我正在尝试在 C++ 类声明中初始化一个数组:

using namespace std;
#include <string>
class myClass{
public:
  string myArray[] = {"a","b","c"};
};

我得到了错误:

错误:在“{”标记之前不允许使用大括号括起来的初始值设定项

【问题讨论】:

  • 你用的是c++11吗?
  • 你的逗号拼错了
  • 除了 C++11 之前的值初始化之外,您不能初始化成员数组。

标签: c++ arrays compilation


【解决方案1】:

不,没有经过编译的 C++11 编译器,您无法在其声明中初始化成员数组。您必须在构造函数中初始化数组成员。如果您知道要初始化数组的元素数量,请不要使用开放数组。

【讨论】:

    【解决方案2】:

    真正的问题很简单,非静态数组数据成员可能无法在没有边界的情况下声明。在块范围或命名空间范围内,初始化器将用于推断大小,但不在类范围内。所以只需将其更改为:

    string myArray[3] = {"a","b","c"};
    

    应该没问题的。

    【讨论】:

    • 我尝试指定大小或声明静态,但仍然遇到相同的错误。我没有使用 C++11
    • @user1701545 如果您没有使用 C++11,那么您就不走运了。您不知道您是否希望此成员是静态的,这也令人担忧。
    猜你喜欢
    • 2021-11-21
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多