我认为我遇到了与LNK2005、LNK1169 错误类似的问题,“int __cdecl g(void)”(?g@@YAHXZ) 已定义,但我找不到问题。
我正在使用 Visual Basic,并且有以下文件
主程序
#include <iostream>
#include "functions.h"
using namespace std;
int main(){
number();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有一个functions.cpp但是在阅读了我链接的问题之后,我将其重命名为functions.h
int number(){
int i = 1;
return i;
}
Run Code Online (Sandbox Code Playgroud)
现在正在显示 error LNK2005: "int __cdecl number(void)" (?number@@YAHXZ) already defined in functions.obj
number()里面的函数有什么问题吗functions.h?
您面临的直接问题是functions.obj包含正在链接的代码。然后您重新定义,number()以便main.cpp它们发生冲突。继续清理项目(应该删除functions.obj,并且您应该能够编译。但是,我建议这样做。
函数.hpp(或函数.h)
int number();
Run Code Online (Sandbox Code Playgroud)
函数.cpp
int number(){
int i = 1;
return i;
}
Run Code Online (Sandbox Code Playgroud)
主程序
#include <iostream>
#include "functions.h"
using namespace std;
int main(){
number();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译时,您的程序将使用编译后的代码创建 2 个对象functions.obj、 和main.obj。由于您number在主文件中使用,编译器会查找该函数的实现。由于该函数的实现在functions.obj对象中,因此您需要将其链接到其中。
如果您要跨多个 C++ 文件使用 number() ,那么您应该始终将代码分离到其自己的文件和实现中。