错误:没有用于调用'begin(int *&)'c ++的匹配函数

时间:2013-07-25 02:49:56

标签: c++

#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;
}

指向ia中第一个元素的P指针。 为什么它说“错误:没有匹配函数来调用'begin(int *&amp;)'c ++” 感谢:!)

3 个答案:

答案 0 :(得分:12)

因为在print()内,变量ia是指针,而不是数组。在指针上调用begin()是没有意义的。

答案 1 :(得分:6)

您在指针上使用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;
}

答案 2 :(得分:5)

正如其他人指出的那样,你的数组正在衰减为指针。衰减是来自C的历史人工制品。要做你想做的事,将数组作为参考并推导出数组大小:

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

print(ia);