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

Ale*_*eee 9 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Oli*_*rth 12

因为在里面print(),变量ia是一个指针,而不是一个数组.调用begin()指针没有意义.

  • 我知道这是一篇旧帖子,但为什么错误显示“... for call to 'begin(int*&amp;)'”而不是“... for call to 'begin(int*)”? (2认同)

P0W*_*P0W 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 我还建议使用基于范围的。 (2认同)

Leo*_*sky 5

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

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

print(ia);
Run Code Online (Sandbox Code Playgroud)