Błąd kompilacji error: conflicting types for 'losowewypelnianie'|
Ostatnio zmodyfikowano 2020-12-28 20:38
13Antoni Temat założony przez niniejszego użytkownika |
Błąd kompilacji error: conflicting types for 'losowewypelnianie'| » 2020-12-28 18:51:32 Dobry wieczór, Napisałem program w C i próbowałem skompilować go za pomocą GNU GCC. Niestety podczas kompilacji otrzymuję taką wiadomość: error: conflicting types for 'losowewypelnianie'| i jest to jedyny błąd jaki pokazuje mi kompilator. funkcja jest zadeklarowana przed użyciem i definicją. Deklaracja wygląda tak: void losowewypelnianie( struct plansza * wsk, char tab1[ 3 ][ 3 ] ); Sama funkcja wygląda tak: void losowewypelnianie( struct plansza * wsk, char tab1[ 3 ][ 3 ] ) { struct plansza * h; for( int i = 0; i < 9; i++ ) { h = malloc( sizeof( struct plansza ) ); h->poprzednia = wsk; for( int j = 0; j < 9; j++ ) { h->obraz[ j / 3 ][ j % 3 ] = tab1[ j / 3 ][ j % 3 ]; } if(( * h ).obraz[ i / 3 ][ i % 3 ] == '-' ) { h->obraz[ i / 3 ][ i % 3 ] = 'o'; } wyswietlanie(( * h ).obraz ); } } Czy jest ktoś w stanie pomóc z tym problemem? |
|
pekfos |
» 2020-12-28 19:04:30 Masz gdzieś inną deklarację tej funkcji i jej lokalizacja powinna być w treści błędu. Gdyby to zreprodukować, komunikat wygląda tak: a.c:2:6: error: conflicting types for 'f' void f(float); ^ a.c:1:6: note: previous declaration of 'f' was here void f(int); ^ |
|
13Antoni Temat założony przez niniejszego użytkownika |
» 2020-12-28 19:32:00 @Pekfos mam tylko jedną deklarację, poza definicją, ale robię tak od zawsze ze wszystkimi funkcjami i zawsze wszystkie działają, więc dlaczego teraz kompilator stwierdził, że to jest błąd? Dla rozjaśnienia wrzucę może cały kod #include <stdio.h> #include <conio.h>
void wyswietlanie( char tab[ 3 ][ 3 ] ); void ruchkomputera( char tab[ 3 ][ 3 ] ); void analizazwycienstwa( char tab[ 3 ][ 3 ] ); void ruchgracza( char tab[ 3 ][ 3 ] ); void losowewypelnianie( struct plansza * wsk, char tab1[ 3 ][ 3 ] );
struct plansza { int ocena; int glebokosc; char obraz[ 3 ][ 3 ]; struct plansza * poprzednia; };
struct plansza * pop; int main() { char tab[ 3 ][ 3 ] = { { '-', '-', '-' }, { '-', '-', '-' }, { '-', '-', '-' } }; while( 1 ) { ruchgracza( tab ); wyswietlanie( tab ); analizazwycienstwa( tab ); ruchkomputera( tab ); wyswietlanie( tab ); analizazwycienstwa( tab ); printf( "\n" ); } }
void ruchgracza( char tab[ 3 ][ 3 ] ) { int c = getch(); c -= 49; printf( "%d\n", c ); if( tab[ c / 3 ][ c % 3 ] == '-' ) { tab[ c / 3 ][ c % 3 ] = 'x'; } else { printf( "ruch niemozliwy, sproboj ponownie\n" ); ruchgracza( tab ); } }
void analizazwycienstwa( char tab[ 3 ][ 3 ] ) { for( int i = 0; i < 3; ++i ) { if( tab[ i ][ 0 ] == 'o' && tab[ i ][ 1 ] == 'o' && tab[ i ][ 2 ] == 'o' ) printf( "Wygrywa kulko" ); else if( tab[ 0 ][ i ] == 'o' && tab[ 1 ][ i ] == 'o' && tab[ 2 ][ i ] == 'o' ) printf( "Wygrywa kulko" ); } if( tab[ 0 ][ 0 ] == 'o' && tab[ 1 ][ 1 ] == 'o' && tab[ 2 ][ 2 ] == 'o' ) printf( "Wygrywa kulko" ); else if( tab[ 2 ][ 0 ] == 'o' && tab[ 1 ][ 1 ] == 'o' && tab[ 0 ][ 2 ] == 'o' ) printf( "Wygrywa kulko" ); for( int i = 0; i < 3; ++i ) { if( tab[ i ][ 0 ] == 'x' && tab[ i ][ 1 ] == 'x' && tab[ i ][ 2 ] == 'x' ) printf( "Wygrywa krzyzyk" ); else if( tab[ 0 ][ i ] == 'x' && tab[ 1 ][ i ] == 'x' && tab[ 2 ][ i ] == 'x' ) printf( "Wygrywa krzyzyk" ); } if( tab[ 0 ][ 0 ] == 'x' && tab[ 1 ][ 1 ] == 'x' && tab[ 2 ][ 2 ] == 'x' ) printf( "Wygrywa krzyzyk" ); else if( tab[ 2 ][ 0 ] == 'x' && tab[ 1 ][ 1 ] == 'x' && tab[ 0 ][ 2 ] == 'x' ) printf( "Wygrywa krzyzyk" ); }
void ruchkomputera( char tab[ 3 ][ 3 ] ) { pop = malloc( sizeof( struct plansza ) ); pop->poprzednia = NULL; for( int i = 0; i < 9; i++ ) { pop->obraz[ i / 3 ][ i % 3 ] = tab[ i / 3 ][ i % 3 ]; } losowewypelnianie( pop, tab ); }
void wyswietlanie( char tab[ 3 ][ 3 ] ) { for( int i = 0; i <= 2; ++i ) { for( int j = 0; j <= 2; ++j ) { printf( "%c ", tab[ i ][ j ] ); } printf( "\n" ); } }
void losowewypelnianie( struct plansza * wsk, char tab1[ 3 ][ 3 ] ) { struct plansza * h; for( int i = 0; i < 9; i++ ) { h = malloc( sizeof( struct plansza ) ); h->poprzednia = wsk; for( int j = 0; j < 9; j++ ) { h->obraz[ j / 3 ][ j % 3 ] = tab1[ j / 3 ][ j % 3 ]; } if(( * h ).obraz[ i / 3 ][ i % 3 ] == '-' ) { h->obraz[ i / 3 ][ i % 3 ] = 'o'; } wyswietlanie(( * h ).obraz ); } }
Oczywiście sprawdziłem co się stanie po usunięciu pierwszej deklaracji, i program rzeczywiście zaczyna działać, ale nie zmienia to faktu, ze nie rozumiem dlaczego linia ta tak bardzo przeszkadza. PS sory za tą losową próbę oznaczenia, ale nie doczytałem jak się to robi. |
|
nanoant20 |
» 2020-12-28 20:15:59 Decyduje kolejność zapisu najpierw struktura potem deklaracje funkcji
|
|
13Antoni Temat założony przez niniejszego użytkownika |
» 2020-12-28 20:38:48 Dzięki za pomoc! Teraz już rozumiem. |
|
« 1 » |