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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
www
記事: 4
登録日時: 14年前

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

#1

投稿記事 by www » 13年前

前、 '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 が未解決です。

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

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

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

#2

投稿記事 by box » 13年前

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)" は未解決です。
ソースの中身を確認してください。
最後に編集したユーザー box on 2012年6月24日(日) 09:36 [ 編集 1 回目 ]
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

へにっくす

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

#3

投稿記事 by へにっくす » 13年前

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

コード:

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#4

投稿記事 by softya(ソフト屋) » 13年前

もう一つの質問に解決チェックをお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Tatu
記事: 445
登録日時: 15年前
住所: 北海道

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

#5

投稿記事 by Tatu » 13年前

同様のエラーメッセージがどのようにしたら発生するのかを調べてみたところ、

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' : 定義されていない識別子です。

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

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

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

#6

投稿記事 by Dixq (管理人) » 13年前

もし館の通りに進めているのであれば、公開しているプロジェクトのコードとどこが違うのか
http://www.geocities.co.jp/SiliconValle ... merge.html
この辺のソフトで比較してみてはいかがでしょう。

閉鎖

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