ページ 11

C言語で構造体と配列のエラー

Posted: 2011年3月22日(火) 12:53
by F55
おはようございます、こんにちは、こんばんは
この掲示板は初めて利用させていただきます、よろしくお願いします

さて本題なのですがタイトルにある通り構造体を使ったプログラムでエラーが出ます
ヘッダファイルが龍神録っぽいですがただのDOSアプリです
イカソース

コード:

/*main.c*/
#include<stdio.h>
#include"GV.h"

int main(void){
		x=jiki.x-enemy[0].x;
		y=jiki.y-enemy[0].y;
		if(x*x+y*y<rangrang*rangrang){
			printf("当たってる\n");
		}
		else{
			printf("当たってない\n");
		}
    return 0;
}

コード:

/*GV.h*/
#include"struct.h"

char_t jiki;
char_t enemy[10];

enemy[0].x=240;
enemy[0].y=160;
enemy[0].rang=30;

jiki.x=240;
jiki.y=450;
jiki.rang=30;

int x,y;
int rangrang=jiki.rang+enemy[0].rang;

コード:

/*struct.h*/
typedef struct{
	int x,y,rang;
}char_t;
EasyIDECとbccでビルドさせてみるとどちらにも「enemy」が再定義されていますと怒られてしまいます^^;
enemy[0]の部分を全部enemyにするとちゃんと出来るのですがなぜでしょうか?

Re: C言語で構造体と配列のエラー

Posted: 2011年3月22日(火) 13:42
by C言語勉強に苦しんでる
多重定義していないため、enemyが再定義されるとでるのではないのでしょうか?
enemyでいくのは、アドレスを指定しているため、エラーがでないのではないのでしょうか?

Re: C言語で構造体と配列のエラー

Posted: 2011年3月22日(火) 13:57
by F55
>多重定義していないため、enemyが再定義されるとでるのではないのでしょうか?
>enemyでいくのは、アドレスを指定しているため、エラーがでないのではないのでしょうか?

多重定義って何ですか?
enemyで行く場合はアドレスをしているとはどういう事なのでしょうか?

Re: C言語で構造体と配列のエラー

Posted: 2011年3月22日(火) 14:34
by h2so5
ヘッダファイルに 
enemy[0].x=240;
などの代入文は書けませんよ。

main.cの関数内に書くべきものです。

Re: C言語で構造体と配列のエラー

Posted: 2011年3月22日(火) 16:08
by F55
h2so5さん

言われたとおりにヘッダファイルは宣言だけにして代入をmain関数にやらせるとちゃんと実行できました
関数の外で変数に値を代入するのはダメなんですね、今まで知りませんでした
また何かあったときはよろしくお願いします、ありがとうございました