C++ 能否在覆盖私有虚拟机中调用受保护的方法?
我在覆盖的虚拟私有方法中调用受保护的方法(非虚拟)时出现链接错误(未解析的外部符号)。通过将“受保护”更改为“公共”来解决链接错误? 我没有找到任何关于这个的信息。 事情是这样的:C++ 能否在覆盖私有虚拟机中调用受保护的方法?,c++,methods,virtual,private,protected,C++,Methods,Virtual,Private,Protected,我在覆盖的虚拟私有方法中调用受保护的方法(非虚拟)时出现链接错误(未解析的外部符号)。通过将“受保护”更改为“公共”来解决链接错误? 我没有找到任何关于这个的信息。 事情是这样的: class Base{ protected: void Finish(); private: virtual void VOnUpdate()=0; }; class Derived: public Base{ private: virtual void VOn
class Base{
protected:
void Finish();
private:
virtual void VOnUpdate()=0;
};
class Derived: public Base{
private:
virtual void VOnUpdate(){
Finish();// unresolved Finish() being called
}
};
通过一些测试,我得出结论,如果我在头文件(其中声明了Base)上定义Finish(),问题也会得到解决。但我不想也不能这样做,因为Finish需要一个包含Base的include(将导致循环引用)。但请注意,这个循环不是问题所在,我创建了一个虚拟方法只是为了确认,它还创建了链接错误。
我不知道。您没有编译源文件,也没有链接生成的目标文件。下次请发布错误消息。它可能对您毫无意义,但可以帮助他人帮助您。这实际上与
受保护的
或私有的
无关,因此您可以大大简化问题。