erreur LNK2005: déjà défini - C ++

Fond

J'ai un projet nommé PersonLibrary qui a deux fichiers.

  1. Personne.h
  2. Person.cpp

Cette bibliothèque produit une bibliothèque statique fichier. Un autre projet est Projettest qui utilise le PersonLibrary (Ajouté les dépendances d'un projet dans VS008). Tout a bien fonctionné jusqu'à ce que j'ai ajouté un non-membre de la fonction de Personne.h. Personne.h ressemble

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 définit SetName fonction. Lorsque j'essaie d'utiliser SetPersonName de Projettestje reçois error LNK2005: déjà défini. Voici comment je l'ai utilisé

#include "../PersonLibrary/Person.h"
int main(int argc, char* argv[])
{
    Person person;
    SetPersonName(person, "Bill");
    return 0;
}

Solutions de contournement essayé

1 - j'ai supprimé les Person.cpp et défini l'ensemble de la classe dans Personne.h. Erreur disparu et tout a fonctionné.

2 - changement de la SetPersonName modificateur de statique. Comme le ci-dessous

static void SetPersonName(Person& person,const std::string name)
{
    person.SetName(name);
}

Questions

  1. Pourquoi le code affiché en premier ne fonctionne pas comme je m'y attendais?
  2. Quelle différence statique fait ici?
  3. Quel est le approapriate solution pour ce problème?

Grâce

source d'informationauteur Navaneeth K N