ページ 11

龍神録プログラミングの館12章で詰みました2

Posted: 2012年6月24日(日) 08:57
by www
前、 'ch_t' の再定義で質問しました。
で、それは解決したのですがまたエラーが
それは、

1>enemy_act_pattern.obj : error LNK2005: "int __cdecl enemy_num_search(void)" (?enemy_num_search@@YAHXZ) は既に enemy.obj で定義されています。
1>enemy_act_pattern.obj : error LNK2005: "void __cdecl enemy_enter(void)" (?enemy_enter@@YAXXZ) は既に enemy.obj で定義されています。
1>enemy_act_pattern.obj : error LNK2005: "void __cdecl enemy_act(void)" (?enemy_act@@YAXXZ) は既に enemy.obj で定義されています。
1>enemy_act_pattern.obj : error LNK2005: "void __cdecl enemy_main(void)" (?enemy_main@@YAXXZ) は既に enemy.obj で定義されています。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern10(int)" (?enemy_pattern10@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern9(int)" (?enemy_pattern9@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern8(int)" (?enemy_pattern8@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern7(int)" (?enemy_pattern7@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern6(int)" (?enemy_pattern6@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern5(int)" (?enemy_pattern5@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern4(int)" (?enemy_pattern4@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern3(int)" (?enemy_pattern3@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern2(int)" (?enemy_pattern2@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern1(int)" (?enemy_pattern1@@YAXH@Z)" は未解決です。
1>C:\Users\省略\Desktop\project\1章\Debug\RyuJin.exe : fatal error LNK1120: 外部参照 10 が未解決です。

長くてすいません。
なぜ、こういうのが出るんでしょうか?
外部参照ということは、エクセルに問題があるんでしょうか?
それともほかに問題があるんでしょうか?
スイマセンが教えてください

Re: 龍神録プログラミングの館12章で詰みました2

Posted: 2012年6月24日(日) 09:30
by box
Excelとは何も関係ありません。
コンパイル終了後のリンクというプロセスにおいて、
 1)同じ名前の関数の実体を複数定義している
 2)どこかから呼び出しているにもかかわらず、実体が見当たらない関数がある
というような場合に起きるエラーです。

1)は、
www さんが書きました: 1>enemy_act_pattern.obj : error LNK2005: "int __cdecl enemy_num_search(void)" (?enemy_num_search@@YAHXZ) は既に enemy.obj で定義されています。
1>enemy_act_pattern.obj : error LNK2005: "void __cdecl enemy_enter(void)" (?enemy_enter@@YAXXZ) は既に enemy.obj で定義されています。
1>enemy_act_pattern.obj : error LNK2005: "void __cdecl enemy_act(void)" (?enemy_act@@YAXXZ) は既に enemy.obj で定義されています。
1>enemy_act_pattern.obj : error LNK2005: "void __cdecl enemy_main(void)" (?enemy_main@@YAXXZ) は既に enemy.obj で定義されています。
2)は、
www さんが書きました: 1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern10(int)" (?enemy_pattern10@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern9(int)" (?enemy_pattern9@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern8(int)" (?enemy_pattern8@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern7(int)" (?enemy_pattern7@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern6(int)" (?enemy_pattern6@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern5(int)" (?enemy_pattern5@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern4(int)" (?enemy_pattern4@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern3(int)" (?enemy_pattern3@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern2(int)" (?enemy_pattern2@@YAXH@Z)" は未解決です。
1>enemy.obj : error LNK2001: 外部シンボル ""void __cdecl enemy_pattern1(int)" (?enemy_pattern1@@YAXH@Z)" は未解決です。
ソースの中身を確認してください。

Re: 龍神録プログラミングの館12章で詰みました2

Posted: 2012年6月24日(日) 09:32
by へにっくす
リンクエラーでLNK2001とあるのは
プロトタイプ宣言はあるが、実体の関数がないということを示しています。
関数名enemy_pattern1~enemy_pattern10の実体は定義されていますかね?
定義されていないなら、以下のような空の関数を作っとけば、とりあえずなくなります。

コード:

void enemy_pattern1(int)
{
    // TODO: 何らかの処理
}
LNK2005は同じ関数名が存在すると言うことです。
ソースenemy_act_patternと、enemyに同じ関数名が存在していないかチェックしましょう。
もしそれぞれで違う処理しているなら、名前を変えるか、staticをつけましょう。
よくあるパターンが、ヘッダーに実体を書いてあるケースですが、まさかそんなことしていないよね?
ヘッダーは関数の実体を書くところではありませんので。
www さんが書きました:外部参照ということは、エクセルに問題があるんでしょうか?
なぜエクセルが出てくるんだか、、コンパイルやリンクするときにエクセルは関係ないですよ。

Re: 龍神録プログラミングの館12章で詰みました2

Posted: 2012年6月24日(日) 10:06
by softya(ソフト屋)
もう一つの質問に解決チェックをお願いします。

Re: 龍神録プログラミングの館12章で詰みました2

Posted: 2012年6月24日(日) 12:03
by Tatu
同様のエラーメッセージがどのようにしたら発生するのかを調べてみたところ、

enemy_act_pattern.cppにないはずのenemy_num_search()などが存在することと
外部参照でenemy_pattern0(int)はなぜか解決状態になっているということから

質問時のwwwさんのコードの状況は以下のようであると考えられます。

enemy_act_pattern.cppを11章終了時のenemy.cppの内容で置き換え、
enemy.cppを12章で追加と書かれている内容で置き換えた。



そうであるならば
enemy_act_pattern.cppを12章で変更と書かれている内容で置き換えればエラーはなくなるはずです。

今度は
1>龍神録project\11章\mydat\source\enemy_act_pattern.cpp(): error C2065: 'PI' : 定義されていない識別子です。
1>龍神録project\11章\mydat\source\enemy_act_pattern.cpp(): error C2065: 'PI' : 定義されていない識別子です。

というエラーが出るかもしれませんが出た場合、
質問する前に説明しているページを全部読んでください。

Re: 龍神録プログラミングの館12章で詰みました2

Posted: 2012年6月24日(日) 13:41
by Dixq (管理人)
もし館の通りに進めているのであれば、公開しているプロジェクトのコードとどこが違うのか
http://www.geocities.co.jp/SiliconValle ... merge.html
この辺のソフトで比較してみてはいかがでしょう。