C++:错误LNK2019:未解析的外部符号
C++: error LNK2019: unresolved external symbol
以下代码会产生此错误:
error LNK2019: unresolved external symbol "char const * __cdecl nameOnly(char const *)"
法典:
const char* nameOnly(const char* namewpath)
{
const char* res = namewpath + strlen(namewpath);
while (res > namewpath) {
const char* tmp = res - 1;
if (*tmp == '/' || *tmp == '') break;
--res;
}
return res;
}
上面的代码是一个普通的 C 文件,我正在使用可视化C++编译它。使用 C 编译器编译时,我没有收到此错误。
更新:我尝试使用extern
:
extern "C"{
const char* nameOnly(const char* namewpath)
{
...
}
return res;
}
}
我收到此错误:
error C2059: syntax error : 'string'
听起来像是函数声明和函数定义之间的差异。
当你说"这段代码是纯 C"时,只有当从C++实现文件中包含头文件时,如果声明被 extern C { ... }
包围,它才是纯 C,否则名称重整就会发挥作用,这就是我认为这个错误的原因。
在
将代码编译为C++项目的一部分时,需要使用将函数标记为extern "c"
的头文件。
内部nameOnly.h
:
#ifdef __cplusplus
extern "C"{
#endif
const char* nameOnly(const char* namewpath);
#ifdef __cplusplus
}
#endif
然后在nameOnly.c
里面:
const char* nameOnly(const char* namewpath)
{
const char* res = namewpath + strlen(namewpath);
while (res > namewpath) {
const char* tmp = res - 1;
if (*tmp == '/' || *tmp == '') break;
--res;
}
return res;
}
现在,当某些cpp文件包含nameOnly.h
时,该函数将被正确标记为extern "C"
。
extern "C"
将解决您的链接问题,因为它告诉C++编译器 C 编译器也需要访问此函数,但C
编译器不理解extern
的这种用法。
如果你想解决它,你可以做这样的事情:
在头文件中:
#ifdef __cplusplus
extern "C"{
#endif
const char* nameOnly(const char* namewpath);
#ifdef __cplusplus
}
#endif
并在您的 .c 文件中:
const char* nameOnly(const char* namewpath)
{
const char* res = namewpath + strlen(namewpath);
while (res > namewpath) {
const char* tmp = res - 1;
if (*tmp == '/' || *tmp == '') break;
--res;
}
return res;
}
相关文章:
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 未解析的外部符号_MsiLocateComponentW@12.
- 在C++中使用 gRPC 时未解析的外部符号
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 仅在少数方法(静态或共享库)中解析的外部符号
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 使用静态 constexpr 成员的未解析外部符号
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- Dlib LNK2001未解析的外部符号USER_ERROR__consistent_build_configurati
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- 类模板上一个特定函数的未解析外部符号
- LNK2001:未解析的外部符号public:static类std::vector