问题:error LNK2005: "void __cdecl fun(void)" ([email protected]@YAXXZ) 已经在 file.obj 中定义

error LNK2005: "void __cdecl fun(void)" ([email protected]@YAXXZ) 已经在 file.obj 中定义

error LNK2005: "void __cdecl fun(void)" ([email protected]@YAXXZ) 已经在 file.obj 中定义

遇到问题:

file文件是cpp文件的时候,编译报错(error LNK2005: "void __cdecl fun(void)" ([email protected]@YAXXZ) 已经在 file.obj 中定义;fatal error LNK1169: 找到一个或多个多重定义的符号)

file文件是c文件的时候,编译成功。

原因:

我是用的是编译工具是Visual Studio2017,此编译器认为.c文件是C语言文件,.cpp文件是C++语言文件。

file文件是cpp文件的时候报错原因:因为main.cpp文件包含了file.cpp文件,所以fun函数在file.cpp文件中编译了一次,又在main.cpp文件中编译了一次。在第二次编译时,因为已经存在同名函数,所以报错。

file文件是c文件的时候不报错的原因:c文件编译函数不会对函数重命名,cpp文件在编译函数会对函数重命名(C++支持函数重载)。此时fun函数同样会编译两次,但是不会有重命名的情况。

拓展:当为下面这种情况时,file文件是c文件仍会报错,原因是因为f.cpp文件和main.cpp文件同时包含了file.c文件,此时fun函数会编译三次,在f.cpp和mian.cpp文件中编译的fun函数会重名,所以报错。

error LNK2005: "void __cdecl fun(void)" ([email protected]@YAXXZ) 已经在 file.obj 中定义

相关文章:

  • 2021-04-30
  • 2022-12-23
  • 2022-12-23
  • 2021-06-29
  • 2022-02-01
  • 2022-12-23
  • 2021-06-25
猜你喜欢
  • 2021-07-14
  • 2021-09-08
  • 2021-07-02
  • 2022-01-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案