Я хочу создать новый компонент, полученный из TPanel. Этот новый компонент имеет только одно закрытое поле: «obj» (объект TObject).
В конструкторе я создаю объект. Позже, когда я пытаюсь получить доступ к объекту, он становится пустым. Зачем?
Заголовок:
class PACKAGE TMyClass : public TPanel
{
private:
TObject *obj;
protected:
public:
__fastcall TMyClass(TComponent* Owner);
void Stuff();
};
CPP файл:
__fastcall TMyClass::TMyClass(TComponent* Owner)
: TPanel(Owner)
{
Caption = "";
DoubleBuffered = True;
Width = 385;
Height = 65;
TObject *obj= new TObject; //obj gets an address here
}void TMyClass::Stuff() // <---- I call this method in the OnClick event of a button.
{
Caption = obj->ClassName(); //obj is NULL here
}
//---------------------------------------------------------------------------namespace Uvolctrl
{ void __fastcall PACKAGE Register()
{ TComponentClass classes[1] = {__classid(TMyClass)};
RegisterComponents(L"Samples", classes, 0); } }static inline void ValidCtrCheck(TMyClass *) // assure that the components do not have any pure virtual functions.
{ new TMyClass(NULL); }
В своем конструкторе вы создаете экземпляр класса и присваиваете его локальной переменной с именем obj
а не твое личное obj
переменная-член.
Других решений пока нет …