2017-03-24 22 views
0

Cのプログラミングでは新しいですが、「未定義の参照」エラーを修正するのに何時間も努力しています。C-未定義の<関数名>への参照

私は戦艦ゲームをコードする必要があり、今は画面上にゲームマップを印刷しようとしています。私のコードprobeblyはあなたに感覚を覚えていませんが、始めにこのエラーを修正しようとしています。

私のコード

#include <stdio.h> 
/*functions declaration*/ 
void mapmaker(char map[8][8]); 
void printmap(char map[8][8]); 

int main() 
{ 
char map[8][8]; 

mapmaker(map); 
printmap(map); 

} 



void mapmaker(char map[8][8]) 
{ 
int i,z; 
/*creating map*/ 
for(i=0;i<8;i++){ 
    for(z=0;z<8;z++) 
    { 
     map[i][z]='~'; 
    } 

} 



void printmap(char map[8][8]) 
{ 
    int num[8]={0,1,2,3,4,5,6,7}; 
    int i,z; 

    for(i=0;i<8;i++) 
     printf("%d",num[i]); 

    printf("\n--------------------------------\n"); 

    for(i=0;i<8;i++) 
     printf("%d|",num[i]); 
     for(z=0;z<8;z++) 
      printf("%c ",map[i][z]); 
     printf("\n"); 
} 

} 

それは関数を実行しようとしたときにエラーが発生 - >「printmap(マップ)」 は、取得「未定義の参照に 『printmap(マップ)』」エラーをイム。

ありがとう!

+2

'mapmaker'では、あなたは閉じ括弧を忘れていました。それ以降は関数の本体の一部であり、コンパイラはあなたに叫んでいるはずです。 – Quentin

+0

閉じ括弧が間違った場所にあります。 GCCを使用する場合、コードをコンパイルできますが、スコープのネストされた関数はコンテナ関数の外で呼び出されることはできません "ネストされた関数"と呼ばれる拡張機能があります。 – user3528438

+1

デバッグを習得する必要があります。まず、コードを最小限の例に減らしてください。たとえば、mapmaker関数とその呼び出しを削除し、printmap本体のコードを削除します。次に、問題の原因となる小さな変更が見つかるまで元に戻します。 –

答えて

1

最後に余分な括弧を入れて、関数printmapの括弧を正しく閉じているわけではありません。また、地図メーカーでは、マップメーカー機能の最後の括弧を入れませんでした。 これはあなたの問題を解決します。

#include <stdio.h> 
/*functions declaration*/ 
void mapmaker(char map[8][8]); 
void printmap(char map[8][8]); 

int main() 
{ 
char map[8][8]; 

mapmaker(map); 
printmap(map); 
return 0; 
} 
void mapmaker(char map[8][8]) 
{ 
int i,z; 
/*creating map*/ 
for(i=0;i<8;i++){ 
    for(z=0;z<8;z++) 
    { 
     map[i][z]='~'; 
    } 
    } 
} //this was missing 
void printmap(char map[8][8]) 
{ 
    int num[8]={0,1,2,3,4,5,6,7}; 
    int i,z; 

    for(i=0;i<8;i++) 
     printf("%d",num[i]); 

    printf("\n--------------------------------\n"); 

    for(i=0;i<8;i++) 
     printf("%d|",num[i]); 
     for(z=0;z<8;z++) 
      printf("%c ",map[i][z]); //in for loop 
     printf("\n"); //not in for loop 
} 

// } //this was extra 
+2

問題とは何だったのか、そしてエラーを解決するために何をしたのか、コードとともに少し説明してください。 – Siraj

+2

OPのように、不適切なインデントを含むコードを回答として投稿する必要がありました。 – babon

+0

回答を編集してくれてありがとう@Mohammad Tayyab。 +1 – Siraj

-3

map[i][z]は、printmap(char map[8][8])で初期化されていません。代わりに参照を送信してください。

+0

これは、*未定義の参照*リンカエラーは発生しません – UnholySheep

+0

実際には問題はありません。 – Quentin

関連する問題