【发布时间】:2020-10-12 18:26:20
【问题描述】:
我有三个这样的文件:
head.h
#ifndef HEAD_
#define HEAD_
extern int f();
#endif
mycpp.cpp
#include "head.h"
int f() {
return 5;
}
myMain.cpp
#include <iostream>
#include "head.h"
#include "mycpp.cpp"
int main()
{
std::cout << f() << std::endl;
system("Pause");
return 0;
}
运行此代码会产生链接错误:
LNK2005 "int __cdecl f(void)" (?f@@YAHXZ) 已在 mycpp.obj 中定义
如果我将inline 添加到mycpp.cpp 中的函数f,错误就会消失。
我的问题是如何在不使用inline 函数的情况下摆脱这个错误?
附:这是一个作业,我只能修改mycpp.cpp 文件。所以#include "mycpp.cpp" 必须在那里。
我知道包含cpp 文件是个坏主意,但我无法更改myMain 文件。它是这样给出的。而且我不应该使用inline。
【问题讨论】:
-
already defined in io.obj- 看起来您在某些 io.cpp 文件中定义了int f(),但您在问题中没有提及。 -
致您的 P.S.,不,它没有。您可能只是应该在 cpp 文件中实现该功能。
-
@marcinj 我修复了那部分。没有其他文件。那应该是
mycpp文件。 -
@sweenish 我的意思是在作业中他们要求不要更改
myMain或head文件。 -
@HadiGhahremanNezhad 你说你不能删除:
#include "mycpp.cpp"?然后也许把它放在一个命名空间中?像命名空间 RemoveThis { #include "mycpp.cpp" }。或者更确切地说 if-def it out :-)
标签: c++ linker-errors inline extern