2013-07-25 149 views
5
#include <iostream> 
#include <iterator> 
using namespace std; 
void print(int ia[]) 
{ 
    int *p = begin(ia); 
    while(p != end(ia)) 
     cout<<*p++<<'\t'; 
} 

int main() 
{ 
    int ia[] = {1,2,3,4},i; 
    print(ia); 

    return 0; 
} 

P指向ia中第一個元素的指針。 爲什麼它說:「錯誤:調用‘開始(INT * &)’C++沒有匹配功能」! 謝謝:)錯誤:沒有用於調用'begin(int *&)'的匹配函數C++

+2

@KarthikT:這沒什麼區別。在指針上調用'begin'將無法工作。 –

+0

@EdS。啊是的..爲什麼我沒有看到.. –

回答

10

因爲裏面print(),變量ia是一個指針,而不是一個數組。在指針上調用begin()沒有任何意義。

+0

我明白了!非常感謝你!:) – Aleeee

4

您正在使用指針上的免費函數beginend,這是不允許的。

你可以做一些類似C++ 11的intializer_list

//g++ -std=c++0x test.cpp -o test 
#include <iostream> 
#include <iterator> 
using namespace std; 
void print(initializer_list<int> ia) 
{ 
    auto p = begin(ia); 
    while(p != end(ia)) 
     cout<<*p++<<'\t'; 
} 

int main() 
{ 
    print({1,2,3,4}); 
    return 0; 
} 
+1

我也建議使用基於範圍的。 – soon

+0

謝謝你!:)這是一個好方法! – Aleeee

+0

這是如何表現的? – Jakobovski

2

正如其他人所指出的,你的陣列衰減的指針。衰減是從C的歷史神器。做你想做的,通過陣列作爲參考,並推導出陣列大小:

template<size_t N> 
void print(int (&ia[N]) 
{ 
    int *p = begin(ia); 
    while(p != end(ia)) 
     cout<<*p++<<'\t'; 
} 

... 

print(ia); 
+0

謝謝!:)你是個好人! – Aleeee

相關問題