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

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

问题描述:

我在C++中使用Visual Studio 2008 Professional与Windows窗体,我有一个类,我必须传递给另一个窗体,所以这里是我在做什么将类型传递给Windows窗体构造函数,并将其转换为类指针以使用它

//FirstFile.cpp

Usuario user; 
user.usuario = "test"; 
user.senha = "*"; 
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 *”这样我就可以在课堂上使用访问“这个”,顺便说一句,我不能让这个

Usuario usuario;

而不是指针,因为windows窗体不允许你,你必须使用指针。那我该怎么做?有什么窍门吗? 我希望我很清楚,谢谢!

+2

'&user'产生一个'Usuario *',但是你只会有一个悬挂指针... – ildjarn 2012-03-29 20:13:03

充分利用对象的指针很简单:

Usuario user; 
Usuario* pUser = &user; 

但它可能使指针无效,因为user是自动存储,并可能导致在使用pUser之前销毁。

我建议你分配user动态和修改ChooseService构造采取指针:

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


//... 

ChooseService(Usuario* user) {...} 

你的具体情况,您的变种会的工作,因为这两个对象具有相同的寿命,但它在很危险长跑。

+0

陆氏崇高的解释,非常感谢。我甚至在facebook上添加了你的原因,如果你在Facebook上看到巴西的请求,你知道这是我哈哈,很高兴有这样的优秀程序员。我对我的回答反应过度,但整个下午我都在墙上打了我的头,所以我们走了。 – Grego 2012-03-29 20:57:13

+0

@Grego:确保你实际上'删除了'那个指针在某个地方是健全的,否则你会发现一个经典的内存泄漏。 – ildjarn 2012-03-29 21:20:34

你不会投,你只需要在地址

+0

在构造函数体退出后,取得'user'的地址会导致一个悬挂指针。即,它会编译,但它不会运行。 – ildjarn 2012-03-29 20:13:48

+0

我以为这是给出,复制它,然后采取地址。点是,他认为这是一种使用演员阵型的转换,因为它实际上并不是。 – 2012-03-29 20:15:07

+0

将它复制到哪里? 'ref class'不能按值保存原生对象。参数通过值传递(并因此生成副本)的事实是_problem_。 – ildjarn 2012-03-29 20:21:19