【问题标题】:C++11 : error: ‘begin’ is not a member of ‘std’C ++ 11:错误:“开始”不是“标准”的成员
【发布时间】:2013-11-21 13:10:23
【问题描述】:

我正在尝试执行以下操作:

source = new int[10];
dest =  new int[10];
std::copy( std::begin(source), std::end(source), std::begin(dest));

但是,编译器报如下错误。

copy.cpp:5434:14: error: ‘begin’ is not a member of ‘std’
copy.cpp:5434:44: error: ‘end’ is not a member of ‘std’
copy.cpp:5434:72: error: ‘begin’ is not a member of ‘std’

我在代码中包含了所需的<iterator> 标头。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: c++ compiler-errors iterator syntax-error std


    【解决方案1】:

    模板函数 std::begin() 和 std::end() 不是针对指针实现的(指针不包含有关它们所引用的元素数量的信息)而是应该编写它们

    std::copy( source, source + 10, dest);
    

    至于错误你应该检查你是否包含标题

    #include <iterator>
    

    也可能您的编译器不支持 C++ 2011 标准。

    【讨论】:

    • 如果你将 source 和 dest 定义为 int source[10], dest[10];那么你确实可以使用这些功能。
    【解决方案2】:

    除了在启用 C++11 的编译器中包含 &lt;iterator&gt;。你应该知道begin/end 对指针没有用,它们对数组有用:

    int source[10];
    int dest[10];
    
    std::copy(std::begin(source), std::end(source), std::begin(dest));
    

    【讨论】:

    • +1 但如果他可以访问 C++11 功能,他应该使用std::array
    • @0x499602D2:同意,但有时简单的[] 对于简单的项目/代码来说并不是一个糟糕的选择。
    【解决方案3】:

    在linux中使用g++编译这段代码也有这个问题。

    使用包含 C++ 特征的 g++ 编译器应添加 C++11 标志

    g++ -std=c++11 -o test test.cpp
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      相关资源
      最近更新 更多