我想我遇到了与 LNK2005, LNK1169 errors, "int __cdecl g(void)" (?g@@YAHXZ) already defined 类似的问题但我找不到问题。
我正在使用 Visual Basic,我有以下文件
main.cpp
#include <iostream>
#include "functions.h"
using namespace std;
int main(){
number();
return 0;
}
我有一个 functions.cpp
但在阅读我链接的问题后,我将其重命名为 functions.h
int number(){
int i = 1;
return i;
}
现在显示 error LNK2005: "int __cdecl number(void)"(?number@@YAHXZ) already defined in functions.obj
functions.h
中的函数number()
有什么问题吗?
最佳答案
您遇到链接问题。
您的直接问题是 functions.obj
包含正在链接的代码。然后您重新定义 number()
在main.cpp
所以他们发生了碰撞。继续清理项目(应该删除 functions.obj
,你应该能够编译。但是,我建议这样做。
functions.hpp(或 functions.h)
int number();
函数.cpp
int number(){
int i = 1;
return i;
}
main.cpp
#include <iostream>
#include "functions.h"
using namespace std;
int main(){
number();
return 0;
}
编译时,您的程序将使用编译代码创建 2 个对象 functions.obj
, 和 main.obj
.由于您使用 number
在主文件中,编译器查找该函数的实现。由于该函数的实现在 functions.obj
中对象,那么您需要将其链接进来。
如果您要使用 number()
跨多个 C++ 文件,那么您应该始终将代码分离到它自己的文件和实现中。
关于c++ - 错误 LNK2005 : "int __cdecl number(void)" (? number@@YAHXZ) 已经在 functions.obj 中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18021465/