Как создать пользовательские компоненты? Ошибка доступа к приватному полю

Я хочу создать новый компонент, полученный из 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);    }

0

Решение

В своем конструкторе вы создаете экземпляр класса и присваиваете его локальной переменной с именем obj а не твое личное obj переменная-член.

2

Другие решения

Других решений пока нет …