我跑http://en.cppreference.com/w/cpp/language/virtual '詳細' 下的第一個實施例來證明的想法基類中的虛函數是否可見?
Base::vf does not need to be visible (can be declared private, or inherited using private inheritance) to be overridden.
class B {
virtual void do_f(); // private member
public:
void f() { do_f(); }; // public interface
};
struct D : public B {
void do_f() override; // overrides B::f
};
int main()
{
D d;
B* bp = &d;
bp->f(); // calls D::do_f();
}
但是編譯器報告錯誤:http://cpp.sh/5hk6v
/tmp/ccNhIT1Y.o: In function `main':
:(.text.startup+0xb): undefined reference to `vtable for D'
:(.text.startup+0x10): undefined reference to `D::do_f()'
collect2: error: ld returned 1 exit status
(我所選擇C++ 14)
索賠是錯誤的還是代碼中存在錯誤?
將必要的代碼放入問題中,而不是鏈接中。 –
** - 1 **未提供代碼和編譯器調用。無論如何,這種說法是正確的,問題出現在代碼中,或者是編譯器中,或者是你的解釋,或者是這種混合。 –
私人會員仍然可見,所以引用很具誤導性。 –