2013-06-29 1 views
2

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

#include <iostream> 

bool online(int a, int network[a][a]) { 
    /*post condition: returns true if every switch in a network is of even degree. Otherwise, returns false.*/ 
    int switches; 
    for(int x=0; x < a; x++) { 
     switches = 0; 
     for(int y=0; y < a; y++) 
      if(network[x][y]) 
       switches += 1; 
     if(switches & 1) 
      return 0; 
    } 
    return 1; 
} 

int main() { 
    int arrayOne[6][6] = 
    { 
     {0,1,1,0,0,0}, 
     {1,0,0,1,0,0}, 
     {1,0,0,1,0,0}, 
     {0,1,1,0,1,1}, 
     {0,0,0,1,0,1}, 
     {0,0,0,1,1,0} 
    }; 
    int arrayTwo[8][8] = 
    { 
     {0,1,1,0,0,0,0,0}, 
     {1,0,0,1,0,0,0,0}, 
     {1,0,0,1,0,0,0,0}, 
     {0,1,1,0,1,0,0,0}, 
     {0,0,0,1,0,1,1,0}, 
     {0,0,0,0,1,0,0,1}, 
     {0,0,0,0,1,0,0,1}, 
     {0,0,0,0,0,1,1,0} 
    }; 
    std::cout << online(6, arrayOne) << std::endl; 
    std::cout << online(8, arrayTwo) << std::endl; 
}  
+0

Я получаю сообщение об ошибке 'Массив имеет тип INT неполный элемент«[]» ', и да, намерение было вернуться ложным, если было нечетное число в любой строке – Dbz

+1

Пожалуйста, помечать только ваш пост с языком вы используете. Я отредактировал его до «C++», если вы используете другой язык, и я неправильно читаю ваше сообщение, удалите тег 'C++' и поставьте только определенный язык, который вы используете. – mcmonkey4eva

+0

Я все еще получаю ту же ошибку в том же месте. – Dbz

ответ

4

Для C99 (который поддерживает массивы переменной длины), нет <iostream>. Убедитесь, что вы скомпилируете программу как C, а не C++, а затем используйте <stdio.h> и включите <stdbool.h>.

printf("%d\n", online(6, arrayOne)); 
printf("%d\n", online(8, arrayTwo)); 

Для C++ массивы переменной длины могут не поддерживаться для вашего компилятора. Вместо этого вы должны использовать шаблон для online().

template <unsigned a> 
bool online(int, int (&network)[a][a]) { 
    //... 
} 
+0

Вопрос только в отношении вашего первого предложения. Поддерживает ли C99 массивы, имеющие переменную длину в двух измерениях? –

+0

Путь к jxh. Вы решили это! Есть ли способ сделать функцию без передачи int с размером? – Dbz

+0

@MartinR: AFAIK, да. – jxh