Передача типа класса в конструктор Windows Forms и необходимость его приведения к указателю класса, чтобы использовать его - PullRequest
1 голос
/ 30 марта 2012

Я использую Visual Studio 2008 Professional в C ++ с формой Windows, у меня есть класс, который я должен передать другой форме, поэтому вот что я делаю

// FirstFile.cpp

Usuario user;
user.usuario = "test";
user.senha = "stackoverflow";
ChooseService cs(user);     
cs.ShowDialog();

// SecondFile.cpp

public ref class ChooseService : public System::Windows::Forms::Form
    {
    public:

        Usuario* usuario;


        ChooseService(Usuario user)
        {


            usuario = user;         
            //I need to cast the Usuario into Usuario*, so I can use it in the class
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
        /...

как я сказал в своем комментарии, мне нужно привести «Usuario» в «Usuario *», чтобы я мог получить доступ к классу, используя «this», кстати, я не могу сделать это

Usuario usuario;

вместо указателя, потому что формы Windows не позволяют вам, вы должны использовать указатель. так как мне это сделать? есть ли хитрость? Я надеюсь, что я был достаточно ясен, спасибо!

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Получить указатель от объекта легко:

Usuario user;
Usuario* pUser = &user;

Но это может сделать указатель недействительным, поскольку user находится в автоматическом хранилище и может быть уничтожен до того, как вы закончите использовать pUser.

Я предлагаю вам динамически распределить user и модифицировать конструктор ChooseService, чтобы получить указатель:

Usuario* user = new Usuario;
user->usuario = "test";
user->senha = "stackoverflow";
ChooseService cs(user);


//...

ChooseService(Usuario* user) {...}

В вашем конкретном случае ваш вариант будет работать, потому что оба объекта имеют одинаковое время жизни, но это опасно в долгосрочной перспективе.

0 голосов
/ 30 марта 2012

Вы не разыгрываете, вы просто берете адрес

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...