2013-11-09 55 views
7

我嘗試做以下操作中的一員:C++ 11:錯誤:「開始」不是「性病」

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>標題。有人可以幫助我嗎?

+3

啓用C++ 11。 (fill) – 0x499602D2

回答

12

模板功能標準::開始()和std ::結束()不是爲指針實施(指針不包含有關它們指的是元素的數量信息)相反,他們應該寫

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

至於錯誤,你應該檢查是否包含的頭

#include <iterator> 

而且也許你的編譯器不支持C++ 2011標準。

+0

如果你要定義source和dest爲int source [10],dest [10];那麼你的確可以使用這些功能。 –

2

除了包含<iterator>在C++ 11啓用編譯器。你應該知道begin/end對指針沒有用處,它們對於數組很有用:

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

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

+1但是,如果他有權訪問C++ 11功能,他應該使用'std :: array'。 – 0x499602D2

+1

@ 0x499602D2:同意,但有時一個簡單的'[]'對於簡單的項目/代碼來說不是一個錯誤的選擇。 – deepmax