简体   繁体   中英

C++11 : error: ‘begin’ is not a member of ‘std’

I am trying to do the following operation:

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

However, the compiler reports the following error.

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’

I have included the required <iterator> header in the code. Can anybody help me on this?

Template functions std::begin() and std::end() are not implemented for pointers (pointers do not contain information about the number of elements they refer to) Instead them you should write

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

As for the error you should check whether you included header

#include <iterator>

Also maybe your compiler does not support the C++ 2011 Standard.

In addition to include <iterator> in C++11 enabled compiler. You should know begin/end are not useful for pointers, they're useful for arrays:

int source[10];
int dest[10];

std::copy(std::begin(source), std::end(source), std::begin(dest));

also have this problem when using g++ compiler this code in linux.

Using g++ compiler that contain C++ featuer should add C++11 flag

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM