我有两个结构:
template <typename T>
struct Odp
{
T m_t;
T operator=(const T rhs)
{
return m_t = rhs;
}
};
struct Ftw : public Odp<int>
{
bool operator==(const Ftw& rhs)
{
return m_t == rhs.m_t;
}
};
我想编译以下内容:
int main()
{
Odp<int> odp;
odp = 2;
Ftw f;
f = 2; // C2679: no operator could be found
}
有什么方法可以让它工作,还是我必须在 Ftw
中也定义运算符?
最佳答案
问题是编译器通常会为你创建一个operator=
(除非你提供),而这个operator=
隐藏了继承的。您可以通过使用声明否决它:
struct Ftw : public Odp<int>
{
using Odp<int>::operator=;
bool operator==(const Ftw& rhs)
{
return m_t == rhs.m_t;
}
};
关于C++:继承和运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3410688/