TCHAR和程序中未解析的外部符号(LNK2019)错误C++
TCHAR and unresolved external symbol (LNK2019) error in C++ program?
我的项目有两个 cpp 文件和一个头文件。一个 cpp 文件包含单个类的实现,其声明位于头文件中。另一个cpp文件是包含int main
函数。
该类的构造函数之一包含一个 TCHAR
参数,它在链接器错误中被引用为未解析LNK2019
函数。
我使用的是 Visual Studio 2010,并且已将项目属性中的Character set
选项设置为 Not Set
,以便我可以使用UNICODE
宏和_UNICODE
宏在char
和wchar_t
之间进行选择。
目前,我已经在我的主 cpp 文件的开头定义了这些,并且头文件包含在这两个文件之后。但是,如果我在头文件的开头定义这些宏,则项目可以完美编译。
有没有办法解决这个问题?还是我必须对类进行硬编码以使用char
或wchar_t
?
谢谢。
您收到链接器错误是因为您在 main 内部定义了 UNICODE
/_UNICODE
宏.cpp而不是在类的实现.cpp中。 因此,当 main.cpp 包含类的头文件时,它将TCHAR
视为wchar_t
,但当您的实现.cpp包含头文件时,它会将TCHAR
视为char
。 您有一个不匹配,导致链接器错误,因为 main.cpp 调用了尚未实际实现的 wchar_t
构造函数。
您应该查找UNICODE
/_UNICODE
宏的存在,而不是手动定义它们。 将"字符集"选项设置为 MBCS 或 Unicode,以便 IDE/编译器可以为您全局管理整个项目的宏。 我不知道将其设置为"未设置"实际上有什么作用,但这不是您在这种情况下实际需要的。
是预处理器结构,显然会让您感到困惑。你的代码,即使你成功了,也会让其他人感到困惑。宏UNICODE
和_UNICODE
必须在定义宏之前定义TCHAR
在使用TCHAR
之前定义它们为时已晚。最好将其留给您的项目设置。
将项目的Character Set
设置为 Unicode
,这是 Windows 内部使用的字符集。然后wchar_t
该TCHAR
,并且 API 调用宏Something()
始终扩展到 SomethingW()
。你可以在任何地方显式使用char
和wchar_t
,代码的读者将准确地看到什么是什么,没有模糊和不清楚的TCHAR
。
Windows API函数SomethingA()
只是SomethingW()
的包装器,因此大量使用A版本效率低下。如果你需要调用 API 函数SomethingA()
,那么明确地去做,这样每个人都会看到你必须做一些低效的事情。
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- Qt C++LNK2019:使用QNetworkAccessManager未解析的外部符号
- LNK2019:C++/CLI 中未解析的外部符号
- 函数 LNK2019 "int __cdecl __scrt_common_main_seh(void)" 中引用的未解析外部符号主错误 (?__scrt_common_main_seh@@YAHXZ
- LNK2019未解析的外部符号"公共:__thiscall
- LNK2019和LNK1120错误,未解析的外部和未解析的符号
- MAPI 链接静态库 (LNK2019: 未解析的外部符号)
- LNK2019未解析的外部符号
- C++编译错误LNK2019:未解决的外部符号错误
- 错误 LNK2019: 未解析的外部符号 Visual Studio 2013 与 openCV
- LNK2019未解析的外部符号_D3DXCreateFontA@48
- nanodbc 错误 LNK2019:未解析的外部符号 - 在基本连接上
- LNK2019:与单位测试中未解决的外部符号
- 编译轨道样品时的C 错误-LNK2019未解决的外部符号
- 未解析的外部符号 (LNK2019)
- TCHAR和程序中未解析的外部符号(LNK2019)错误C++
- C++未解析的外部符号LNK2019和LNK2001
- Qt 未解析的外部符号LNK2019
- 用于基于COM的库的带有WinRT组件的未解析外部符号LNK2019
- 无法解析的外部符号- LNK2019从c++ dll