2013-07-25 111 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

相关问题