gpt4 book ai didi

c++ - 如何定义全局可见运算符

转载 作者:行者123 更新时间:2023-11-30 01:22:28 25 4
gpt4 key购买 nike

我想在我的类(class)中使用 binary_search,所以我定义了一个运算符<。当一切都在主文件中时它可以工作,但是当我在另一个文件中编写类时出现链接器错误。

显示问题的最简单示例是B.h:

class B
{
public:
~B(void);
string b;
int v;
B(int val, string bb);
friend bool operator< (const B &lhs, const B &rhs);
};

bool operator< (const B &lhs, const B &rhs){
return lhs.v < rhs.v;
};

B.cpp 只是定义了构造函数。主要是这样的:

#include "B.h"
int main( int argc, const char* argv[] )
{

vector<B> vec;
B a1(2, "gg");
B a2(4, "gdhd");
vec.push_back(a2);
vec.push_back(a1);
bool pos = binary_search(vec.begin(),vec.end(), B(2, "ghd"));
}

错误 LNK2005: "bool __cdecl operator<(class B const &,class B const &)"(??M@YA_NABVB@@0@Z) already defined in Main.obj: fatal error LNK1169: 找到一个或多个多重定义的符号

如何解决?

最佳答案

是因为头文件中的运算符定义不当。您需要使其成为内联(或静态)。

如果不是inlinestatic,函数将在包含头文件的每个源文件中定义,导致多个定义错误。

关于c++ - 如何定义全局可见运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16295637/

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