【问题标题】:why am I getting "non-aggregate cannot be initialized with initializer list"为什么我得到“非聚合不能用初始化列表初始化”
【发布时间】:2012-02-13 19:06:13
【问题描述】:
std::map<std::string, int> m = {
    {"Marc G.", 123},
    {"Zulija N.", 456},
    {"John D.", 369}
};

在 Xcode 中,我将 C++ 语言方言设置为“C++0x [-std=c++0x]”,并将 C++ 标准库设置为“支持 C++0X 的 libc++ LLVM C++ 标准库”

我需要设置其他东西吗?

【问题讨论】:

  • 无论有没有 '=',语法似乎都是正确的(当然,假设您将 std::string 带入了范围)。
  • g++ -std=c++11 &lt;filename&gt;

标签: c++ xcode


【解决方案1】:

EDIT 10/2013:这个答案真的很老了,Apple Clang 现在确实支持这个。

自 Clang 3.0 起尚不支持 C++11 初始化列表

在此处查看实施状态:Clang C++11 implementation status

(如果只有编译器支持此功能,您的语法看起来是正确的)

【讨论】:

  • 哦,我认为这取决于使用的库。我想编译器需要支持它更有意义。
  • 您可以尝试使用 GNU++11 (-std=gnu++11)。很确定它支持初始化列表。
  • -std=gnu++11 为我工作 - 在 Xcode 或从 makefile 编译不同
  • 为什么在 clang3.4 上使用 -std=c++11 不起作用?我没有读过标准,但我不认为返回列表初始化是一个扩展......
  • c++-11 之前的数组初始化有替代方案吗?
【解决方案2】:

Clang 3.6.2 支持初始化列表语法。只要记住在编译时传递-std=c++11 标志即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多