将类类型传递给Windows窗体构造函数,并将其强制转换为类指针以使用它

时间:2012-03-29 20:11:07

标签: c++ visual-c++ pointers c++-cli

我在C ++中使用Visual Studio 2008 Professional和Windows Form,我有一个类,我必须传递给另一个Form,所以这就是我正在做的事情

  

// 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 个答案:

答案 0 :(得分:1)

从对象获取指针很简单:

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) {...}

在您的特定情况下,您的变体将起作用,因为两个对象具有相同的生命周期,但从长远来看它是危险的。

答案 1 :(得分:0)

你不会施展,你只需要拿地址