2009-03-07 52 views
12

背景エラーLNK2005:既に定義 - C++

私は2つのファイルを持っているPersonLibraryという名前のプロジェクトを持っています。

  1. Person.h
  2. 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.cppSetNameメソッド関数を定義します。 SetPersonNameTestProjectから使用しようとすると、エラー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); 
} 

質問

  1. 以下のような?
  2. どのような違いがありますかスタティックはこちらですか?
  3. この問題の解決策はどれぐらいですか?

おかげ

答えて

関連する問題