我有两个文件:
测试.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
测试.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()的代码(这只是一个例子,你可以猜到,真正的代码更长)。