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
。毕竟结构体内的是成员函数,所以默认第一个参数就是自己。
而结构体外的就不是成员函数了。它不知道你的第一个参数是什么,所以需要两个参数。
至于 const
,const
只能在成员函数中用,代表不改变。如果你希望在结构体外部的重载运算符中实现类似的效果,可以把参数中的 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
友元函数本质上就是一个类外部的函数(特殊的地方在于可以访问类的 private
和 protected
成员),只是需要在结构体内部声明(不然谁知道哪些函数是 friend
),于是就顺理成章地可以在结构体内部实现,结果就有人认为这是一类成员函数。
by fengxiaoyi @ 2025-01-11 20:45:28
@LionBlaze@PengAo@dalu 好的,谢谢