c++ - 错误 LNK2005 : "int __cdecl number(void)" (? number@@YAHXZ) 已经在 functions.obj 中定义

标签 c++ include

我想我遇到了与 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/

相关文章:

c++ - 单击按钮时如何更改光标

c++ - 归并排序中选择中间元素

c++ - 加密/解密 SQLite 数据库并使用它 "on the fly"

c++ - Visual Studio + CMake 的 GLOB_RECURSE

gcc - gcc 是否递归搜索 CPATH?

c++ - 枚举和函数

c++ - 使用Mingw-w64使用-m32选项(32位代码)进行编译时出错

php - Joomla 包括数据库功能

java - 在 java 类中包含自动生成的方法

perl - 如何将源目录包含到 Padre IDE?