構造体が意味をなしていない…

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
agunesu

構造体が意味をなしていない…

#1

投稿記事 by agunesu » 1年前

<struct.h>
typedef struct{

int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int money; //お金
int img; //画像
int slow; //スローかどうか
double x, y; //座標

}ch_t;
<graph.h>

extern ch_t ch;

この文がエラーが発生します内容は【識別子"ch_t"が定義されていません】とでます。どうしたらいいかわかんないので返答をよろしくお願いします。<(_ _)>

アバター
usao
記事: 1566
登録日時: 6年前

Re: 構造体が意味をなしていない…

#2

投稿記事 by usao » 1年前

あるファイルに(graph.hかな)に
ch_t って突然書いてみたら,
コンパイラに「ch_t ってのは何だよ? しらねーよ」と言われた,という感じですか.

> <struct.h>
というヘッダファイルを一体何のために書いたのか? どう使うつもりなのか?
というあたりを詳しく説明できませんか?

Math

Re: 構造体が意味をなしていない…

#3

投稿記事 by Math » 1年前

C言語初心者のかたとお見受けします。大体想像がつくのでお答えしますね。

"struct.h"は構造体の定義として私のすきな流儀でかいてありすね。タグは必要がなければ書かない方がいいと思います。

コード:

/* "struct.h" */
typedef struct{

int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int money; //お金
int img; //画像
int slow; //スローかどうか
double x, y; //座標

}ch_t;
"graph.h" は構造体変数の宣言で問題ないですね。

コード:

/* "graph.h" */

extern ch_t ch; 

さて問題となるgraph.c を書いてみます。テスト用に int grp(void)関数を作りました。

コード:

#include "struct.h"
#include "graph.h" 

int grp(void){
    ch.flag = 12345;
    return 0;
}

次にメインのプログラム c1.c をかきます。他のファイルでextern 宣言されている 構造体変数 chをグローバル宣言します。

コード:

#include <stdio.h>
#include"struct.h"

ch_t ch; 
extern int grp(void);

int main(void)
{
    grp();
    printf("%d\n",ch.flag);
    return 0;
}
[code]

コンパイルは使い安いボーランドCの後継C++Builderを使いました。cx.bat バッチをダブルクリックするだけです。

cx.bat
[code]
bcc64 c1.c graph.c
dir *.exe
pause
c1.exe
pause
http://www2.koyoen.birdview.co.jp/~abcxyz/z0815a.png

#include ファイルはCの欠点でC#(C++++)では全く必要なくなりました。#include ファイルは覚えるのが大変ですよ。

Math

Re: 構造体が意味をなしていない…

#4

投稿記事 by Math » 1年前

CX-Builderのバッチファイル cx.bat をわすれてました。ボーランドCの後継で使い安いですね。
バッチファイルをダブルクリックするだけで起動します。

cx.bat

コード:

bcc64 c1.c graph.c
dir *.exe
pause
c1.exe
pause

Math

Re: 構造体が意味をなしていない…

#5

投稿記事 by Math » 1年前

CX-Builder はCommunity Ed. (64ビット版)ですが VS2017Community でコンパイルしてみると

cl.exe を使用します。

c.bat

コード:

rem コンパイル後リンク
cl c1.c graph.c
dir *.exe
pause

rem 実行結果
c1.exe
pause
'x64' モード
http://www2.koyoen.birdview.co.jp/~abcxyz/z0815b.png

Math

Re: 構造体が意味をなしていない…

#6

投稿記事 by Math » 1年前

#3 の c1.c  のなかに cx.bat の説明が混ざってました。
[訂正]
c1.c

コード:

#include <stdio.h>
#include"struct.h"

ch_t ch; 
extern int grp(void);

int main(void)
{
    grp();
    printf("%d\n",ch.flag);
    return 0;
}

Math

Re: 構造体が意味をなしていない…

#7

投稿記事 by Math » 1年前

Windows Vista, VC++2008 でコンパイル/リンク してみました。
VS2017 Community と全く同じソース/ バッチファイルです。
(32ビット x86)

http://www2.koyoen.birdview.co.jp/~abcxyz/z0815c.png

agunesu

Re: 構造体が意味をなしていない…

#8

投稿記事 by agunesu » 1年前

ありがとうございました。

返信

“C言語何でも質問掲示板” へ戻る