お世話になっております。
現在下記のエラーが出て、完全に思考が停止してしまいました。
【エラーメッセージ】
In file included from invider.c:6: inc/display_info.h:4: error: conflicting types for ‘myposition_t’ inc/display_info.h:4: note: previous declaration of ‘myposition_t’ was here invider.c: In function ‘main’: invider.c:51: 警告: passing argument 2 of ‘initialize_main’ from incompatible pointer type inc/extern.h:9: note: expected ‘struct myposition_t *’ but argument is of type ‘struct myposition_t *’ In file included from inc/extern.h:2, from initialize.c:4: inc/display_info.h:4: error: conflicting types for ‘myposition_t’ inc/display_info.h:4: note: previous declaration of ‘myposition_t’ was here
自分での調査した範囲だと
- 「conflicting types for...」のエラーが出るケース
(1) 呼び出し元の関数より後に呼び出し先の関数を定義してしまっているケース
(2) 同じ名前の変数を定義しているケース
- 今回エラー対象となっているのは構造体のため、(1)には該当しない?(そもそもincludeするからmain関数より先に読み込まれるはず)
myposition_tは他の変数名で使用していないため、(2)にも該当しない。
参考書等を見ても解決の糸口が見つかりませんでした。
解決法をご存知の方がいらっしゃれば、よろしくお願いいたします。
【display_info.h】
typedef struct{ char col ; char row ; } myposition_t;
【extern.h】
#include "macro.h" #include "display_info.h" extern void draw_pic(char display[DISPLAYROWMAX][DISPLAYCOLMAX]); /************************************/ /* initialize.c */ /************************************/ extern char initialize_main(char display[DISPLAYROWMAX][DISPLAYCOLMAX], myposition_t *position); // extern char initialize_top(char display[DISPLAYROWMAX][DISPLAYCOLMAX]); /************************************/ /* move.c */ /************************************/ // extern char move_right(mypositon_t *position); // extern char move_left(myposition_t *position);
【macro.h】
#define DISPLAYCOLMAX (71) #define DISPLAYROWMAX (200)
【invider.c】
#include <stdio.h> #include <termios.h> #include <unistd.h> #include <fcntl.h> #include "inc/extern.h" #include "inc/display_info.h" #include "inc/macro.h" /****************************************************************/ /* WindowsのkbhitはLinuxでは使えないため、termios機能を使用する */ /* kbhit関数はネットのを引用 */ /****************************************************************/ int kbhit(void){ struct termios oldt, newt; int ch; int oldf; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); oldf = fcntl(STDIN_FILENO, F_GETFL, 0); fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); ch = getchar(); tcsetattr(STDIN_FILENO, TCSANOW, &oldt); fcntl(STDIN_FILENO, F_SETFL, oldf); if (ch != EOF) { ungetc(ch, stdin); return 1; } return 0; } /*****************************************************************/ /* メイン関数 */ /*****************************************************************/ int main(void){ char inputkey; //入力キー // int position; //自分のキャラの位置 myposition_t position = {0} ; char result = 0; //下位関数戻り値 char display [DISPLAYROWMAX][DISPLAYCOLMAX] = {' '} ; // ゲーム画面 char *first_flg ; initialize_main(display, &position); while (1) { if (kbhit()) { inputkey = getchar(); switch(inputkey){ /* case 'l': result = move_right(&position); if(result == 1){ continue; }else{ break ; } case 'h': result = move_left(&position); if(result == 1){ continue; }else{ break; } */ case 'q': goto exit; default: ; } draw_pic(display) ; } } exit: return 0; } void draw_pic(char display[DISPLAYROWMAX][DISPLAYCOLMAX]){ char loopcnt_row ; char loopcnt_col ; for(loopcnt_row = 0; loopcnt_row < DISPLAYROWMAX; loopcnt_row++){ for(loopcnt_col = 0; loopcnt_col < DISPLAYCOLMAX; loopcnt_col++){ printf("%s",display[loopcnt_row][loopcnt_col]); } } }
【initialize.c】
#include <stdio.h> #include "inc/macro.h" #include "inc/display_info.h" #include "inc/extern.h" char initialize_main(char display[DISPLAYROWMAX][DISPLAYCOLMAX], myposition_t *position){ char loopcnt_row ; char loopcnt_col ; position->col = 34; position->row = DISPLAYCOLMAX - 1; for(loopcnt_row = 0; loopcnt_row < DISPLAYROWMAX; loopcnt_row++){ for(loopcnt_col = 0; loopcnt_col < DISPLAYCOLMAX; loopcnt_col++){ if(loopcnt_col == DISPLAYCOLMAX-1){ display[loopcnt_row][loopcnt_col] = '\n' ; }else if(loopcnt_row == position->row && loopcnt_col == position->col){ display[loopcnt_row][loopcnt_col] = '_' ; }else{ display[loopcnt_row][loopcnt_col] = ' '; } } } } /* char initialize_top(char display[DISPLAYROWMAX][DISPLAYCOLMAX]){ char loopcnt_col ; for(loopcnt_col = 0;loopcnt_col < DISPLAYCOLMAX-1; loopcnt_col++){ display[DISPLAYROWMAX-1][loopcnt_col] = '-' ; } display[DISPLAYROWMAX-1][DISPLAYCOLMAX-1] = '\n' ; return 1 ; }*/
inc/extern.h と initialize.c はどのような内容でしょう.
情報不足で申し訳ありません。
extern.hとinitialize.cを追加いたしました。
これだけではコンパイルできません。上記ファイルがコンパイルできるだけのソースを上げて下さい。
計5ファイルあります。
分かりづらくなってしまうかと思い、直接関係ないものは避けていました。
UPするソースを修正します。少々お待ちください。
更新しました。
一応やろうとしていることは、cuiのゲームを作ろうとしています。
そのゲーム画面として、縦200、横70バッファ(?)分の初期設定をやろうとしています。
すみません、更新が反映されなかったので少々お待ちください。

回答2件
あなたの回答
tips
プレビュー