我有一个模板类A
,其中包含内部类B
。我想要一个友元等于运算符。
然而,以下代码无法编译通过,它会显示:couldn't deduce template parameter ‘T’
#include <iostream>
template<typename T>
struct A
{
struct B
{
T b;
template<typename T2>
friend bool operator == (const typename A<T2>::B& b1, const typename A<T2>::B& b2);
};
B b;
};
template<typename T>
bool operator == (const typename A<T>::B& b1, const typename A<T>::B& b2)
{
return b1.b == b2.b;
}
int main() {
A<int>::B b1, b2;
b1.b = 3;
b2.b = 2;
std::cout << (b1 == b2) << std::endl;
return 0;
}
我必须使用友元版本,因为 STL 算法的调用方式会导致无法找到 ==
,即使我有bool operator == (const B& b_) { return b == b_.b; }
如何解决这个问题?
operator==
中忘记加上const
修饰符所导致的。这里有对你问题的解释。 - LogicStuffconst
?它说这是一个非成员函数。我不太明白。 - Mochanbool operator ==
中使用了赋值符号(=)而不是相等符号(==)。 - aparpara