列挙型のextern宣言について

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

列挙型のextern宣言について

#1

投稿記事 by Leo » 11年前

列挙型のextern宣言がうまくいきません。

ーーーーーenum.hーーーーー

コード:

typedef enum{
     E1,
     E2,
}e_t;
ーーーーーextern.hーーーーーー

コード:

#include "enum.h"

extern e_t e;

ーーーーーmain.cppーーーーー

コード:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){

	DxLib_Init();					// Dxライブラリの初期化
	SetDrawScreen(DX_SCREEN_BACK);	// 裏画面設定

	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0){

		e = E1;

		switch (e){
		
		case E1:

		default:
			break;
		}
	}

	DxLib_End(); // DXライブラリ終了処理
	return 0;
}

という風に書いたのですが
error LNK2001: 外部シンボル ""enum e_t e" (?scene@@3W4e_t@@A)" は未解決です。
というエラーだ出てしまいます。どういう風に直せばよいでしょうか。

box
記事: 2002
登録日時: 14年前

Re: 列挙型のextern宣言について

#2

投稿記事 by box » 11年前

main.cpp

extern.h
をインクルードしていないのはなぜですか?

インクルードすれば直るかどうかは、わかりません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Leo

Re: 列挙型のextern宣言について

#3

投稿記事 by Leo » 11年前

すいません。main.cppのenum.h抜けはこちらに書き込む時のミスです。
enum.hをインクルードしても解決しません。

box
記事: 2002
登録日時: 14年前

Re: 列挙型のextern宣言について

#4

投稿記事 by box » 11年前

Leo さんが書きました: enum.hをインクルードしても解決しません。
私の回答をちゃんとごらんになったのでしょうか。
私は、
enum.h
が抜けている
とは、書いておりません。
extern.h
が抜けているのでは?
とは書きました。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Leo

Re: 列挙型のextern宣言について

#5

投稿記事 by Leo » 11年前

度重なり申し訳ありません。
enum.h ではなくextern.hでした。
extern.hでも同じ結果になります。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 列挙型のextern宣言について

#6

投稿記事 by みけCAT » 11年前

ちゃんとeの実体

コード:

e_t e;
を定義しているファイルがあり、それをリンクしていますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Leo

Re: 列挙型のextern宣言について

#7

投稿記事 by Leo » 11年前

みけCATさんがご指摘された通り、eの実体の定義が抜けていました。
main.cppに

コード:

e_t e;
を加えたところ無事に動作しました。
ありがとうございました。

閉鎖

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