【问题标题】:C++ Candidate function not viable: no known conversion from 'int' to 'int *' for 1st argument; take the address of the argument with &C++ 候选函数不可行:第一个参数没有从“int”到“int *”的已知转换;用 & 取参数的地址
【发布时间】:2021-04-21 18:47:41
【问题描述】:

好吧,我真的不知道这个错误是什么意思。 * 是指针对吗?我没有使用指针,所以我不明白发生了什么?这是我的第二节编程课,所以我还是个新手。任何帮助将不胜感激!

MAIN.CPP

#include <iostream>
#include "arr.hpp"
    
int main()
{
    int size = getInteger();
    int array;
    
    fillArray(array,size);
    sortArray(array, size);         //THE ERROR COMES UP FOR ALL OF THESE FUNCTIONS. 
    displayArray(array, size);
    binSearch(array, size, value);
    
    return 0;
}

ARR.CPP

#include "arr.hpp"
#include <iostream>

int getInteger()
{
    int value;
    std::cout << "Please enter integer between 10 and 20 for size of array: ";
    std::cin >> value;
    // check if size is in range
    if (value >= 10 && value <= 20)
    {
        return value;
    }
    else
    {
        std::cout << "Error. Please enter a correct value." << std::endl << std::endl;
        std::cin.clear(); //clears error from cin.fail()
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //removes old cin input for value
        std::cin >> value;
    }
    return value;
}

void fillArray(int array[], int size)
{
    std::srand(static_cast<unsigned>(std::time(0)));
    for (int i = 0; i < size; i++)
    {
       array[i] = (std::rand() % 99)+1;
    }
}

void sortArray(int array[], int size)
{
    std::sort(array, array+size);
}

void displayArray(int array[], int size)
{
    for (int i = 0; i < size; i++)
    {
        std::cout << array[i] << std::endl;
        if((i+1)%5 == 0)
        {
            std::cout << std::endl;
        }
    }
}

bool binSearch(int array[], int size, int value)
{
    int low = 0;
    int high = size - 1;
    int mid;
    
    while(low <= high)
    {
        mid = (low+high) / 2;
        if(value == array[mid])
        {
            return mid;
        }
        else if (value > array[mid])
        {
            low = mid + 1;
        }
        else
        {
            high = mid - 1;
        }
    }
    return -1;
}

ARR.HPP


#ifndef arr_hpp

#define arr_hpp

int getInteger();

void fillArray(int array[], int size);

void sortArray(int array[], int size);

void displayArray(int array[], int size);

bool binSearch(int array[], int size, int value);

#endif /* arr_hpp */

【问题讨论】:

  • 您的函数期望您传递一个数组。您正在传递一个 int。数组在传递给函数时会衰减为指针,这就是错误所显示的内容。
  • 此外,发布的代码几乎不可读。我建议编辑帖子以使其具有一定的可读性。在这个网站上,海报上有责任让他们的问题可读,其他人没有责任阅读不可读的帖子。
  • I'm not using pointers 但你是!我知道这很令人惊讶,但您不能将数组作为 C++ 中的函数参数。在这段代码中void fillArray(int array[], int size);array实际上是一个指针。

标签: c++ arrays pointers error-handling compiler-errors


【解决方案1】:
  1. 您将array 声明为整数,而不是数组。我假设您想声明一个大小为 size 的数组并将其传递给函数。
  2. 您缺少value 的声明。

要修复它,请将array 的声明替换为value

int size = getInteger();
int array[size];
int value;
...

编辑: 如 cmets 中所述,上述建议在标准 C++ 中是不合法的。要让您的程序使用合法的 C++ 编译,您可能有几个选择:

  1. 使size 在编译时已知,例如100,并要求用户输入一个介于 0 到 100 之间的数字。
  2. 使用std::vector 等数据结构并相应地修改所有函数定义。

【讨论】:

  • int array[size]; 可变大小的数组在 C++ 中是不合法的。它的工作原理是编译器扩展。
  • 你是对的,我使用 ISO C++11 编译器和 GNU 扩展进行编译。如果手动编译,请使用标志 -std=gnu++11。
  • 如果您使用 gcc 或其他支持类似扩展的编译器,则可以使用。但它是特定于编译器的,应该在答案中注明,而不是作为评论。 OP 的问题与任何特定的编译器无关。
猜你喜欢
  • 2022-12-04
  • 2018-10-08
  • 1970-01-01
  • 2020-08-26
  • 2022-07-29
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多