Как создать пользовательские компоненты? Ошибка доступа к приватному полю - PullRequest
0 голосов
/ 07 ноября 2018

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

1 Ответ

0 голосов
/ 07 ноября 2018

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

...