求助关于重载运算符,百度无果

学术版

fengxiaoyi @ 2025-01-11 18:46:14

报错如下,求解决方式

error: 'TR::qwq TR::operator+(TR::qwq, TR::qwq) const' must have either zero or one argument

代码:

qwq operator +(qwq xx,qwq yy)const{
    ...
}

如果写结构体里面是不会报错的,但不知道为什么写外面会错/yiw


by dalu @ 2025-01-11 18:50:39

我的习惯:

bool friend operator < (node x,node y){

}

by fengxiaoyi @ 2025-01-11 18:54:44

补充:这个qwq结构体是放在另一个结构体里的(即报错信息中的TR)

把结构体的定义转到外面就解决了233

求原因


by fengxiaoyi @ 2025-01-11 18:55:14

外面:结构体TR外面


by linyutong123123 @ 2025-01-11 19:10:33

@fengxiaoyi可以看一下源代码吗


by PengAo @ 2025-01-11 19:48:07

@fengxiaoyi 结构体外面怎么用 const 啊(就是夹在小括号和大括号之间的那个),去掉应该就可以了


by LionBlaze @ 2025-01-11 19:52:06

@fengxiaoyi

其他人都错了。

原因是,如果是在结构体内定义,需要是 qwq operator+(qwq yy),而 xx 就是 *this。毕竟结构体内的是成员函数,所以默认第一个参数就是自己。

而结构体外的就不是成员函数了。它不知道你的第一个参数是什么,所以需要两个参数。

至于 constconst 只能在成员函数中用,代表不改变。如果你希望在结构体外部的重载运算符中实现类似的效果,可以把参数中的 qwq xx 变为 const qwq &xx

如果你想要在结构体内部使用两个参数的,可以使用 friend 友元函数。我一般都用这个。


by LionBlaze @ 2025-01-11 19:53:12

@dalu 我差不多也用这种。

@linyutong123123 这些信息足够了。

@dalu 辱骂与不友善内容。

@PengAo 正确的,结构体外不可以使用 const


by LionBlaze @ 2025-01-11 19:54:53

friend 友元函数本质上就是一个类外部的函数(特殊的地方在于可以访问类的 privateprotected 成员),只是需要在结构体内部声明(不然谁知道哪些函数是 friend),于是就顺理成章地可以在结构体内部实现,结果就有人认为这是一类成员函数。


by fengxiaoyi @ 2025-01-11 20:45:28

@LionBlaze@PengAo@dalu 好的,谢谢


|