2013-04-09 4 views
-3

У меня проблема в этом коде. когда я вызываю функции. compiler показать эту ошибку:C++: слишком мало аргументов в вызове функции

«слишком мало аргументов при вызове функции» ................................ ............................

bool check_matrix(int x, int y){ 
    if (x<ROWS || y<COLUMNS) 
     return true; 
    return false; 

    } 

bool compute_duplicate(int x, int y, int array[], int array_length){ 
    for (int i=0; i< array_length; i++) 
    { 
     if(array[i]==compute_address(x,y)) 
      return false; 
    } 

    return true; 
    } 
//////////////////////////////////// 

for (int i=0; i<array_length; i++){ 
    if ((check_matrix(x,(y+1))==true) && compute_duplicate((x,(y+1), array, array_length)==false)) { 
     array[i]= compute_address(x,(y+1)); 
     y++; 
     d++; 
     i++; 
    } 

    if ((check_matrix((x+1),y)==true) && compute_duplicate((x+1),y, array, array_length)==false)) { 
     array[i]=compute_address((x+1),y); 
     x++; 
     d++; 
     i++; 
    } 
    array_length=d; 
} 
+3

Какая функция? Какая линия выдает ошибку? Дайте * реально * ошибка компилятора, а не малую часть. – Yuushi

+0

Если вы считаете, что вам нужно сравнить логическое значение с «true», а затем вспомнить, что результат сравнения также является логическим, поэтому вам нужно написать '((check_matrix (x, (y + 1)) == true) == true) '. –

+3

Более серьезно, если бы вы не отображали код нечитабельно со всеми ненужными' == true/false' и дополнительными скобками вокруг этих сравнений, проблема была бы совершенно очевидна. –

ответ

2

Следующий вызов функции имеет неуместны кронштейн

compute_duplicate((x,(y+1), array, array_length)==false) 

это должно быть

(compute_duplicate(x,(y+1), array, array_length)==false) 

такая же ошибка существует в двух местах внутри вашего цикла.

+0

спасибо, он работает. – mahdimb

1

Ваша проблема здесь:

compute_duplicate((x,(y+1), array, array_length)==false)) 

Т.е. вы пытаетесь позвонить compute_duplicate с один аргумент типа bool, являющийся результатом действительное выражение(x,(y+1), array, array_length)==false. Заметим, что запятая является оператором в C/C++, поэтому эффективным результатом выражения выше является array_length==false.

Что, вероятно, имел в виду,:

compute_duplicate(x,(y+1), array, array_length)==false 
1

compute_duplicate((x,(y+1), array, array_length)==false)) зовет compute_duplicate по выражению (x,(y+1), array, array_length)==false), который является единственным булево значение, которое true тогда и только тогда, когда (x,(y+1), array, array_length) является false. Это не то, что вы хотите.

1

Дополнительная пара скобок здесь:

compute_duplicate((x,(y+1), array, array_length)==false) 

делает компилятор думает, вы передаете один BOOL в качестве аргумента. Освободите их, и ошибка должна быть исправлена.

1

compute_duplicate((x,(y+1), array, array_length)==false) вызывает compute_duplicate с одним аргументом, результатом которого является (x,(y+1), array, array_length)==false.

Возможно, вы имели в виду (compute_duplicate(x,(y+1), array, array_length)==false)?

(Просто немного отличается расположение () с, но совсем другой кусок C++.

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