2014-09-08 3 views
0

Я знаю, что это немного исправно, но я не могу понять свою проблему. Вероятно, он имеет какое-то отношение к параметрам в аргументах, но не уверен.C++ errors :: no подходящая функция для вызова функции '

void Input (int **&x, int *&arr, int &size1,int &size2, int a, int b) 
{ 

    cout << "Please enter 2 non-negative integer values: "<< endl; 
    cout << "1. "; 
    cin >> size1; 
    int checkVal(int size1, int a); 
    cout << "2. "; 
    cin >> size2; 
    int checkVal(int size2, int b); 

    void putArr(int **&x,const int &size1,const int &size2); 

    arr[0] = size1; 
    arr[1] = size2; 

} 


int checkVal (int &size, int x) 
{ 
    do{ 
    if (size < 0) 
     cout << size << " is not a non-negative integer. Re-enter --> " << x << ". "; 
     cin >> size; 
    }while(size < 0); 

    return size; 

} 



void summation(int ***&y, int *&arr) 
{ 
    int *size = new int; 

    *size = **y[0] + **y[1]; 
    y[2] = new int *(size); 

    *(arr + 2) = *size; 

    delete size; 

} 

int main() 
{ 
    int size, size1, size2; 
    int a = 1, b = 2; 

    int** x; 
    int*** y; 
    int** q; 
    int**** z; 

    int *arr[2]; 

    allocArr(x, y, q, z); 
    Input(x, arr, size1, size2, a, b); 
    checkVal(size); 
    putArr(x, size1, size2); 
    summation(y, arr); 
    display(z); 


} 

Проблема возникает со всеми тремя из этих функций. Я очень смущен. Заранее благодарю.

+1

Почему вы смесительные указатели и ссылки? Например, 'int *** & y' может просто быть' int *** y'. –

+0

Для более точного ответа на вопрос: какая строка вызывает ошибку? Что такое ** точное **, ** полное ** сообщение об ошибке? –

ответ

2

Не упоминая звезды с неизвестным назначением, у вас есть код, как это в нескольких местах:

cin >> size1; 
int checkVal(int size1, int a); 
cout << "2. "; 

Здесь вы объявляете функцию checkVal, не называют. В данном конкретном случае, я считаю, он должен быть заменен на

cin >> size1; 
cout << "2. " << checkVal(size1, a); 

(при условии, вы предоставляете аргументы правильных типов)

0
Input(x, arr, size1, size2, a, b); 
// ... 
summation(y, arr); 

Проблема в обоих случаях является второй аргумент, arr. Он имеет тип int*[] (массив указателя на int), который может распасться на тип int** (указатель на указатель на int), но этот тип несовместим с типом параметра int*& (ссылка на указатель на int).

checkVal(size); 

Это терпит неудачу, потому что функция принимает два аргумента, но передается только один, а остальные аргументы не имеют значения по умолчанию.

В этом коде есть множество других проблем, но это касается вашего вопроса относительно того, почему вызовы этих функций не могут быть скомпилированы.

Смежные вопросы