ページ 11

列挙型のextern宣言について

Posted: 2014年7月20日(日) 15:18
by Leo
列挙型の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)" は未解決です。
というエラーだ出てしまいます。どういう風に直せばよいでしょうか。

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

Posted: 2014年7月20日(日) 16:24
by box
main.cpp

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

インクルードすれば直るかどうかは、わかりません。

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

Posted: 2014年7月20日(日) 16:31
by Leo
すいません。main.cppのenum.h抜けはこちらに書き込む時のミスです。
enum.hをインクルードしても解決しません。

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

Posted: 2014年7月20日(日) 16:41
by box
Leo さんが書きました: enum.hをインクルードしても解決しません。
私の回答をちゃんとごらんになったのでしょうか。
私は、
enum.h
が抜けている
とは、書いておりません。
extern.h
が抜けているのでは?
とは書きました。

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

Posted: 2014年7月20日(日) 16:52
by Leo
度重なり申し訳ありません。
enum.h ではなくextern.hでした。
extern.hでも同じ結果になります。

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

Posted: 2014年7月20日(日) 16:54
by みけCAT
ちゃんとeの実体

コード:

e_t e;
を定義しているファイルがあり、それをリンクしていますか?

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

Posted: 2014年7月20日(日) 17:06
by Leo
みけCATさんがご指摘された通り、eの実体の定義が抜けていました。
main.cppに

コード:

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