c++ - 列表初始值设定项

标签 c++ c++11

我正在尝试声明 std::initializer_list 类型的迭代器,如 this answer 中所述。 .

但我总是收到此错误:

error: 'iterator' is not a member of 'std::initializer_list<int>'

如何声明 std::initializer_list 类型的迭代器?

例如以下代码将不起作用。另外,我使用的编译器支持新的标准草案。

int findCommon(std::initializer_list<int> nums)
{
    std::initializer_list<int>::iterator it;
    for (it = nums.begin() ; it != nums.end() ; ++it)
    {
        std::cout << *it << std::endl;
    }
    return 1;
}

最佳答案

您需要添加

#include <initializer_list>

对于这个例子也可能

#include <iostream>

还要确保您使用 -std=c++0x 切换到 g++。并且您至少需要 g++ 4.4 版本。 当使用 MacPorts 的编译器时,编译器称为 g++-mp-4.5g++-mp-4.4(错误的假设)。

我注意到最近修复了一些与 GCC bugzilla 上的 initializer_list 相关的错误,所以我建议获取 GCC 的最新版本,4.5.1。因为使用这个版本时,我可以毫无问题地编译您的两个示例。

关于c++ - 列表初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3803780/

相关文章:

c++ - 从 WNDCLASS 切换到 WNDCLASSEX 后标题栏中没有图标

C++0x - 导出已消失,异常规范已弃用。这会影响你的代码吗?

c++ - clang-format 可以在列中对齐变量或宏赋值吗?

c++ - std::atomic 内存屏障可以用于在线程之间传输非原子数据吗?

c++ - 我应该让 QFile (或 fstream)保持打开状态吗?

c++ - c++上的循环依赖和继承编译错误

c++ - 为什么 g++ 4.8.1 会发出转换警告

c++ - GCC 4.4 fails to link valid C++11 code, when options are -std=C++0x -O0

c++ - 为什么我们不直接使用 Object 文件?

c++ - 使用CRTP时如何调用派生类的构造函数?