首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual C++错误LNK2019

Visual C++错误LNK2019
EN

Stack Overflow用户
提问于 2012-10-27 17:57:47
回答 2查看 9.9K关注 0票数 2

好的,所以我一直使用gcc编译器。这是我使用这个IDE的第一个项目。我的项目是这样组织的:

main.cpp,它包含a.h a.c,它包含a.h并实现在a.h中声明的方法

当我编译它时,我得到了以下结果:

代码语言:javascript
复制
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl destroyPlayer(struct player *)" (?destroyPlayer@@YAXPAUplayer@@@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl drawPlayer(struct player *)" (?drawPlayer@@YAXPAUplayer@@@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "void __cdecl movePlayer(struct player *,int *)" (?movePlayer@@YAXPAUplayer@@PAH@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "struct player * __cdecl createPlayer(int,int)" (?createPlayer@@YAPAUplayer@@HH@Z) referenced in function _main

这些都是a.h中的函数。通过使用GCC命令行,我可以将它们编译在一起。所有文件都将添加到项目中。我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-27 18:02:08

我相信Visual Studio会自动将.c文件编译成C文件,因此名称损坏可能在其中起到一定作用。尝试将a.c重命名为a.cpp,看看是否有帮助。

票数 6
EN

Stack Overflow用户

发布于 2012-10-27 20:56:52

错误消息不言而喻:

未解析的外部符号"void __cdecl destroyPlayer...“

你有main.cpp和a.c.

For main.cpp链接器期望a.h中声明的所有函数都使用C++名称损坏和C++调用约定,而for a.c链接器期望a.h中声明的所有函数都使用C命名和__cdecl调用约定。

如果a.c中的代码没有使用C++功能,并且您希望从使用C++功能的main.cpp中调用它,那么在a.h中,您需要添加以下内容:

代码语言:javascript
复制
#ifdef __cplusplus
extern "C" {
#endif

// your function declarations

#ifdef __cplusplus
}
#endif

或者,如果不需要混合使用C和C++,可以将所有文件重命名为.c或.cpp。

最后,确保文件是实际重命名的,因为Visual Studio支持“虚拟”重命名(仅在项目中重命名,而不重命名实际文件)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13099083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档