gpt4 book ai didi

c++ - 使用好友方法时发生奇怪的链接错误

转载 作者:行者123 更新时间:2023-12-03 06:57:52 27 4
gpt4 key购买 nike

main.cpp

#include "test.cpp"

int main()
{

}
测试文件
// test.cpp
#include <iostream>
using namespace std;

class Test
{
public:
friend ostream& operator<<(ostream& out, Test& o1);
};


ostream& operator<<(ostream& out, Test& c)
{
return out;
}
输出:
错误1 :严重性代码说明项目文件行列抑制状态
错误LNK2005“类std::basic_ostream &__cdecl运算符<<((类std::basic_ostream &,class Test&)”(?? 6 @ YAAAV ($ basic_ostream @ DU)$ char_traits @ D @ std @@@@ std @@ AAV01 @ AAVTest @@@@ Z)已在crops.obj测试中定义E:\ Desktop \ University \ Programming \ C++ \ KPI \ Test \ Test \ main.obj
错误2 :严重性代码说明项目文件行列抑制状态
错误LNK1169找到一个或多个乘法定义的符号测试E:\ Desktop \ University \ Programming \ C++ \ KPI \ Test \ Debug \ Test.exe 1 1
为什么我有两个链接错误?那里有什么错?

最佳答案

错误消息在此处具有描述性,您正在重新定义运算符(operator)。发生这种情况是因为您试图链接包含相同定义的对象。
这里的问题是您要包含“test.cpp”,并且可能正在对其进行编译(然后尝试进行链接)。
您应该只包含包含声明的文件(通常是.h),您应该创建类似以下内容的文件:

//test.h
//declarations and inline methods only here
#include <iostream>
using namespace std;

class Test
{
public:
friend ostream& operator<<(ostream& out, Test& o1);
};


ostream& operator<<(ostream& out, Test& c);
//test.cpp
//definitions here
#include "test.h"
ostream& operator<<(ostream& out, Test& c)
{
return out;
}
//main.cpp
#include "test.h"

int main()
{

}
然后编译test.cpp,main.cpp并将两者链接在一起。

关于c++ - 使用好友方法时发生奇怪的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63919622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com