Laz*_*Laz 2 c c++ visual-studio-2010
好的,所以我一直使用gcc编译器.这是我用这个IDE的第一个项目.我的项目组织如下:
main.cpp其包括a.h
a.c,其包括a.h并实现中声明的方法a.h
当我编译它时,我得到以下内容:
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
Run Code Online (Sandbox Code Playgroud)
这些都是其中的所有功能a.h.使用GCC命令行,我可以将它们编译在一起.所有文件都添加到项目中.我错过了什么吗?
错误消息不言自明:
未解析的外部符号"void __cdecl destroyPlayer ...
你有main.cpp和ac
对于main.cpp链接器,期望在ah中声明的所有函数都使用C++名称修改和C++调用约定,而对于ac链接器,期望在ah中声明的所有函数都使用C命名和__cdecl调用约定.
如果你的ac中的代码没有使用C++特性,而你想从main.cpp调用它,它确实使用了C++特性,那么你需要添加以下内容:
#ifdef __cplusplus
extern "C" {
#endif
// your function declarations
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
或者,如果您不需要混合使用C和C++,请将所有文件重命名为.c或.cpp.
最后,确保文件实际上已重命名,因为Visual Studio支持"虚拟"重命名(仅在项目中,而不重命名实际文件).