错误LNK2005:“int __cdecl number(void)”(?number@@YAHXZ)已在functions.obj中定义

2 c++ include

我认为我遇到了与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

Kir*_*kus 5

您遇到链接问题。

您面临的直接问题是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() ,那么您应该始终将代码分离到其自己的文件和实现中。