我有一個基類A
,我與X
延長。在A
裏面還有另外一個類,B
。似乎虛擬方法沒有被定義,但我不明白爲什麼?爲什麼這個子類代碼會導致運行時錯誤?
class A {
public:
class B {public: bool value;};
A() {}
B b_;
void DoStuff(B& b);
private:
virtual void DoStuffImpl(B& b) = 0;
};
class X : public A {
public:
X() {}
void Trigger();
private:
virtual void DoStuffImpl(B& b);
};
void A::DoStuff(B& b) {
DoStuffImpl(b);
}
void X::Trigger() {
DoStuff(b_);
}
void X::DoStuffImpl(B& b) {
b.value = true;
}
int main(){
X x;
x.Trigger();
return x.b_.value;
}
附:在此之前,因爲我有我的代碼不同的問題,但我不能甚至使這個玩具例如工作,所以現在我有這個讓我好奇....
這裏是上述代碼的鏈接,這是編譯和失敗運行:http://ideone.com/mBJ1Kg
如果不運行,它不會導致運行時錯誤。 –
順便說一句,你應該初始化'bool'成員。 –