12
私は2つのファイルを持っているPersonLibraryという名前のプロジェクトを持っています。
- Person.h
- Person.cpp
このライブラリは、静的ライブラリファイルを生成します。もう1つのプロジェクトはPersonLibrary(VS008にプロジェクトの依存関係が追加されました)を使用するTestProjectです。私は、非メンバ関数をPerson.hに追加するまで、すべてうまくいきました。 Person.hが
class Person
{
public:
void SetName(const std::string name);
private:
std::string personName_;
};
void SetPersonName(Person& person,const std::string name)
{
person.SetName(name);
}
のように見えるPerson.cppはSetNameメソッド関数を定義します。 SetPersonNameをTestProjectから使用しようとすると、エラーLNK2005が既に定義されていますが定義されています。私はPerson.cppを取り除き、Person.hでクラス全体を定義している - 。ここで私は回避策が
1を試してみました
#include "../PersonLibrary/Person.h"
int main(int argc, char* argv[])
{
Person person;
SetPersonName(person, "Bill");
return 0;
}
それを使用する方法ですエラーがなくなり、すべてが機能しました。
2 - 変更名がの修飾子をのスタティックに変更しました。コードは、私が期待通りに動作していない最初示さなぜ
static void SetPersonName(Person& person,const std::string name)
{
person.SetName(name);
}
質問
- 以下のような?
- どのような違いがありますかスタティックはこちらですか?
- この問題の解決策はどれぐらいですか?
おかげ