KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Background I have a project named PersonLibrary which has two files. Person.h Person.cpp This library produces a static library file. Another project is TestProject which uses the PersonLibrary (Added though project dependencies in VS008). Everything worked fine until I added a non-member function to Person.h . Person.h looks like 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 defines SetName function. When I try to use SetPersonName from TestProject , I get error LNK2005: already defined . Here is how I used it #include "../PersonLibrary/Person.h" int main(int argc, char* argv[]) { Person person; SetPersonName(person, "Bill"); return 0; } Workarounds tried 1 - I have removed the Person.cpp and defined the whole class in Person.h . Error gone and everything worked. 2 - Changed the SetPersonName modifier to static . Like the below static void SetPersonName(Person& person,const std::string name) { person.SetName(name); } Questions Why the code shown first is not working as I expected? What difference static made here? What is the approapriate solution for this problem? Thanks
Tags (comma-separated)
Save Edits
Cancel