Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 能否在覆盖私有虚拟机中调用受保护的方法?_C++_Methods_Virtual_Private_Protected - Fatal编程技术网

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(将导致循环引用)。但请注意,这个循环不是问题所在,我创建了一个虚拟方法只是为了确认,它还创建了链接错误。
我不知道。

您没有编译源文件,也没有链接生成的目标文件。下次请发布错误消息。它可能对您毫无意义,但可以帮助他人帮助您。这实际上与
受保护的
私有的
无关,因此您可以大大简化问题。