Фон
У меня есть проект с именем PersonLibrary, который имеет два файла.
- Person.h
- Person.cpp
Эта библиотека создает файл статической библиотеки. Другим проектом является TestProject, который использует PersonLibrary (добавлен как зависимостей от проекта в VS008). Все работало нормально до тех пор, пока я не добавил функцию Person, не являющуюся членом. 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: уже определен. Вот как я его использовал
#include "../PersonLibrary/Person.h"
int main(int argc, char* argv[])
{
Person person;
SetPersonName(person, "Bill");
return 0;
}
Обходные методы были проверены
1 - Я удалил Person.cpp и определил весь класс в Person.h. Ошибка исчезла, и все сработало.
2 - Изменен модификатор SetPersonName на статический. Как ниже
static void SetPersonName(Person& person,const std::string name)
{
person.SetName(name);
}
Вопросы
- Почему первый код не работает так, как я ожидал?
- Какая разница, сделанная здесь?
- Какое подходящее решение для этой проблемы?
Спасибо