初めまして。
初心者特有の無理解からくるものとは存じてますが、リンカエラーが出てしまって困って
います。
環境はVC6.0 SP2です。
あるプロジェクト(複数のダイアログで構成)で、どのダイアログからでも呼び出せる関
数が必要だったのでヘッダーファイルを自作し、プロジェクトへ追加しました。
最初は問題なかったのですが、突然
「LNK2005:Foo(class CStatic *,int) (?Foo@@YAXPAVCStatic@@H@Z) はすでに
HOGEHOGEDlg.obj で定義されています」
というエラーが出まくってしまい、MSDNの http://support.microsoft.com/default.aspx?
scid=kb;ja;148652#kb2を試してみたり色々調べていたのですが
どうにも治ってくれないのです。
(ちなみにFoo(class CStatic *,int)というのが自作ヘッダーファイルで作った関数で
す)
ちなみに、このエラーが出だしたきっかけはオブジェクトファイルの削除でした。
どうすればいいのかまったくわからず困り果てています。
どうかご助言よろしくお願いいたします。
#マルチポストについて調べ
てみてください。
ヘッダに関数本体を書いてま
せんか
宣言だけにするか(推奨)、
inline化を検討してみてくださ
い。
#読みにくくてごめんなさい
、張り付けたら改行がおかし
かったです…orz
# なんでだろう…orz
#マルチポストについて
解答を急ぐあまり。。申し訳ありません
おっしゃる通り、ヘッダに関数本体の記述をしています。
本当に無知で申し訳ないのですが、ヘッダに宣言のみ書くとすると
関数本体はcppファイルに書くという事ですよね?
自作ヘッダーファイルと同じように、cppファイルを自分で
プロジェクトへ追加してそこへ本体の記述をすればよいということでしょうか?
重ね重ね申し訳ありません。
お時間ありましたらご教示いただけると幸いです。
素早い解答ありがとうございました。
そうです。
CPPを足して、そっちに書いてください。
マルチポスト先すべてに対し
「どのような原因であったか/如何に解決したか」
を報告し、終結してください。
それが最低のマナーです。
わかりました、環境が手元に無いので今は試せませんが^^;、
Banさんのおっしゃる通り明日やってみます。
まだやってみたわけではないので解決とはいえないかもしれませんが、
打つ手無しだったので非常に助かりました。
解答ありがとうございました。
#C++Builderは使ってないのでわかりませんが、サイズの最適化でもしてるんでしょうか。
#まぁ解決できたそうで何よりですが。
追加報告
教えていただいた通り、ヘッダに合わせてcppファイルをひとつ作成し、そちらに関数本
体の定義を記述することによってリンカエラーが出なくなりました。
それだけの確認に午前いっぱいかかってしまったわけですが。。。;
グローバル変数の定義などもcppファイルでやらないと同じようにエラーが出ますね(当
然ですね)
これでやっと先へ進めます・・・Banさん、ご教示本当にありがとうございました。