我有兩個文件:(C++)碰撞當調用外部類方法在構造函數應該設置內部類的構件
test.h
#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
class A{
private:
class B;
B *bp;
public:
A(int val);
void setX(int value);
};
#endif // TEST_H_INCLUDED
TEST.CPP
#include "test.h"
class A::B{
int x;
B(A &a, int value){
a.setX(value);
}
friend class A;
};
A::A(int val) : bp(new B(*this, val)){
}
void A::setX(int value){
bp->x = value;
}
雖然試圖創建一個類型爲AI的對象時發生崩潰
A a(5);
一些調試後,我發現在這行的程序崩潰:
bp->x = value;
我的猜測是,由於我打電話setX的()從構造函數中,BP沒有在B類的實例指向正在創建。但是,這是怎麼回事?我不想在B構造函數中複製setX()的代碼(這只是一個例子,正如您猜測的那樣,實際代碼更長)。