在VS2017中我得到错误C2660。有很多相关的帖子,但是 我发现没有可与我相提并论的案例。
情况:A类为_mem实现了getter / setter。 setter是虚拟的并且在B中被覆盖。在B函数“set”中我调用getter,它只在A中声明并且是void。这是一件非常独特的事情。为什么即使获得c2660? 我不明白,对不起。
(只需要setter - 它需要一个参数值 - 覆盖并保持不带任何参数的getter。)
class A
{
public:
A(int x)
{
_mem=x;
}
inline int mem(void) const {return _mem;}
virtual bool mem (int x) { _mem=x; return true;}
protected:
int _mem;
};
class B : public A
{
public:
B (int x) : A(x)
{
}
public:
bool mem (int x) { _mem = x;return true; }
void set(const B& x)
{
x.mem(); // c2660
}
};