0

これは一般的な問題であることは承知していますが、ファイルのインクルード方法に間違いはないと確信しています。

基本ファイルをお渡しします。

Main.cpp:

#include "GameState.h"
#inlcude "Timer.h"

int main ( int argc, char** argv ) {

GameState.h:

#pragma once
#include "Character.h"

Character.h:

#pragma once
#include "Setup.h"

Setup.h:

#pragma once

#include "SDL.h"
#include "SDL_main.h"
#include "SDL_image.h"

エラーレポート:

Error   1   error LNK2005: "void __cdecl apply_surface(int,int,struct SDL_Surface *,struct SDL_Surface *,struct SDL_Rect *)" (?apply_surface@@YAXHHPAUSDL_Surface@@0PAUSDL_Rect@@@Z) already defined in Character.obj   C:\Users\Jim\Documents\C++\herorpg\herorpg\Main.obj
Error   2   error LNK2005: "bool __cdecl init(struct SDL_Surface * &)" (?init@@YA_NAAPAUSDL_Surface@@@Z) already defined in Character.obj   C:\Users\Jim\Documents\C++\herorpg\herorpg\Main.obj
Error   3   error LNK2005: "bool __cdecl load_files(struct SDL_Surface * * const)" (?load_files@@YA_NQAPAUSDL_Surface@@@Z) already defined in Character.obj C:\Users\Jim\Documents\C++\herorpg\herorpg\Main.obj
Error   4   error LNK2005: "struct SDL_Surface * __cdecl load_image(char *)" (?load_image@@YAPAUSDL_Surface@@PAD@Z) already defined in Character.obj    C:\Users\Jim\Documents\C++\herorpg\herorpg\Main.obj
Error   6   error LNK1169: one or more multiply defined symbols found   C:\Users\Jim\Documents\C++\herorpg\Debug\herorpg.exe

私が含めているものに何か問題がありますか?さらに情報が必要だと思われる場合は、完全なコードを投稿します。以前は迷惑だったようです。

4

3 に答える 3

0

考えられる理由:

  1. ヘッダー ファイルで関数を定義します。関数は .cpp ファイルでのみ定義する必要があります。

  2. 含むループヘッダーファイル。のように: ah には bh が含まれ、bh には ch が含まれ、ch には ah が含まれます。「#pragma once」は、1 つのヘッダー ファイルが複数回インクルードされるのを防ぐことしかできませんが、ループ インクルードを防ぐことはできません。この問題を解決するには、「前方宣言」を使用して一部の #include ステートメントを置き換えます。

前方宣言に関するいくつかのリンク:

http://en.wikipedia.org/wiki/Forward_declaration

前方宣言はいつ使用できますか?

http://msdn.microsoft.com/en-us/library/f432x8c6(v=vs.80).aspx

于 2013-05-06T14:06:37.317 に答える
0

リンカ エラーは、エラーが原因ではありません#include。リンカ エラーは通常、コンパイラが何かの定義を見つけられない場合に発生します。または、複数の定義が見つかった場合 (この場合など)

複数の SDL ライブラリとリンクしているかどうか、またはコードのどこかに自分で関数を定義しているかどうかを確認してください。

于 2013-05-06T13:39:19.527 に答える