g ++编译器无法识别我的功能

时间:2016-10-01 02:05:39

标签: c++ arrays function g++ clang++

我刚刚开始编码,现在正在学习数组。我正在尝试编写一个包含数组列表的程序,并告诉我第一个或最后一个数字是否为2.为此,我使用了一个函数。

我的代码如下:

    #include <iostream>
    using namespace std;

    const int size = 6;
    bool firstlast(int array[size]);

    int main()
    {
        int array[size];
        for (int index = 0; index < size; index++)
        {
            cout << "Enter value for array[" << index << "]\n";
            cin >> array[index];
        }

        bool check = firstlast(array[size]);
        if (check)
            cout << "The array either starts or ends in 2!\n";
        else 
            cout << "The array does not start or end with 2.\n"; 
        return 0;
    }

    bool firstlast(int array[size])
    {
        if (array[0] == 2)
            return true;
        if (array[size - 1] == 2)
            return true;
        return false;
    }

我做错了什么? 编译器给出了错误:

candidate function not viable: no known conversion from 'int' to 'int *' for 1st argument; take the address of the argument with and

2 个答案:

答案 0 :(得分:1)

编译器正在识别您的函数。

问题在于代码调用函数的方式

bool check = firstlast(array[size]);

试图将array[size]array的一个不存在的元素)传递给期望指针的函数。

这个电话大概应该是

bool check = firstlast(array);

因为数组在传递给函数时被隐式转换为指针。

答案 1 :(得分:0)

此代码

bool check = firstlast(array[size], size);

尝试传递数组的size元素而不是数组本身。在C ++中,数组通过指针传递,即使您使用数组语法编写函数参数。

为避免让自己感到困惑,请将firstlast更改为

bool firstlast`(int* array, int size)`

并用

调用它
bool check = firstlast(array, size);