2011-12-14 9 views
4

がわからない原因、libに定義されていますが、私が持っていると言う:標準ライブラリはすでに私がここで間違ってやっているリンカエラー

//foo.h

class foo 
{ 
public: 
int Get10(std::wstring); 
}; 

//foo.cpp 

int foo::Get10(std::wstring dir) 
{ 
    return 10; 
}; 

そして、私のようにそれをコンパイルlibに、私は、関連するヘッダ(foo.hという)とatttemptと一緒に別のプロジェクト内のlibがfooのインスタンスを呼び出すすることを含んでいる場合:言って

foo f; 
f.Get10(L"ABC"); 

私はリンカエラーを取得する:

エラー1エラーLNK2005: "パブリック:__thiscall のstd :: _ Container_base12 ::〜_Container_base12(無効)" (?? 1_Container_base12 @ STD @@ QAE @ XZ)すでに foo.libで定義されている(foo.obj )C:\ foo \ msvcprtd.lib(MSVCP100D.dll)フット

これはどうなるのでしょうか?

+0

クラス定義の後にセミコロン ';'を追加しようとしましたか? –

+0

これはソースファイルのhahaにあります。私がここに置いたものから除外してしまうのは悪いです。 – tweetypi

答えて

18

「エラー1エラーLNK2005:」パブリック:__thiscallのstd :: foo.lib(foo.obj)ですでに定義されている_Container_base12 ::〜_Container_base12(void 1_Container_base12 @ std @@ QAE @ XZ)C:\ foo \ msvcprtd.lib(MSVCP100D.dll)フットエット "

私が見ることができますから、このエラーメッセージは、MSVCランタイムライブラリを2回インクルードしようとしていることを意味します。これは、ランタイムライブラリオプションfoo.libをコンパイルした結果、マルチスレッド(/ MT)とオプションのマルチスレッドDLL(/ MD)を持つテストプロジェクトが原因である可能性があります。

両方のプロジェクトのプロジェクトプロパティ/ C/C++ /コード生成のランタイムオプションを確認し、両方のプロジェクトで同じであることを確認してください。

+0

"実行時ライブラリオプション:マルチスレッド(/ MT)とオプションのテストプロジェクト:マルチスレッドDLL(/ MD)ビンゴ、それはまさにそれでした(それを投稿するためにここに来ました) – tweetypi

+0

私は前に同じ問題を経験していましたので、あなたはそのエラーを投稿したときに何が起こっているのか知っていました:) – ksming

+1

この他の質問は関連しています: http://stackoverflow.com/questions/4917592/compiling-and-using-jsoncpp-on-visual-studio10-boost-with –

0

任意の.hファイルにfoo.hを含めていますか?あなたが一度ファイルあたりのクラスに1つ以上を定義しないことを確認するために、ヘッダーガードを追加する必要があります。

#ifndef FOO_H_ 
#define FOO_H_ 

class foo 
{ 
public: 
    int Get10(std::wstring); 
} 

#endif // FOO_H_ 

参照:http://en.wikipedia.org/wiki/Include_guard

+0

私はすでにそれを行っています... – tweetypi

+0

使用しているすべての機能のソースとコマンドラインをすべて含めることができますか? – sligocki

+0

リンカエラーは、すべてのヘッダファイルの問題を通り過ぎています... – Joey

関連する問題