My project has two cpp files and one header file. One cpp file contains the implementation of a single class and its declaration is in the header file. The other cpp file is which contains the int main function.
One of the constructors of the class includes a TCHAR parameter and it is cited as the unresolved function in LNK2019 linker error.
I’m using visual studio 2010 and I have set the Character set option in the project properties to Not Set so that I can choose between char and wchar_t using UNICODE and _UNICODE macros.
Currently I have defined these in the beginning of my main cpp file and the header files are included after those two. However, if I define these macros in the beginning of header file, the project compiles perfectly.
Is there anyway to solve this issue ? Or do I have to hard code the class to use either char or wchar_t ?
Thanks.
You are getting the linker error because you are defining the
UNICODE/_UNICODEmacros inside of main.cpp but not in your class’s implementation .cpp. As such, when main.cpp includes your class’s header file, it seesTCHARaswchar_t, but when your implementation .cpp includes your header file, it seesTCHARascharinstead. You have a mismatch that causes the linker error because main.cpp calls awchar_tconstructor that you have not actually implemented.You are supposed to look for the presence of the
UNICODE/_UNICODEmacros, not actually define them manually. Set the “Character Set” option to MBCS or Unicode so the IDE/compiler can manage the macros globally for the entire project as a whole for you. I don’t know what setting it to “Not Set” actually does, but it is not what you actually need in this situation.