2012-03-29 46 views
1

我在C++中使用Visual Studio 2008 Professional與Windows窗體,我有一個類,我必須傳遞給另一個窗體,所以這裏是我在做什麼將類型傳遞給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 *」這樣我就可以在課堂上使用訪問「這個」,順便說一句,我不能讓這個

Usuario usuario;

而不是指針,因爲windows窗體不允許你,你必須使用指針。那我該怎麼做?有什麼竅門嗎? 我希望我很清楚,謝謝!

+2

'&user'產生一個'Usuario *',但是你只會有一個懸掛指針... – ildjarn 2012-03-29 20:13:03

回答

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

你的具體情況,您的變種會的工作,因爲這兩個對象具有相同的壽命,但它在很危險長跑。

+0

陸氏崇高的解釋,非常感謝。我甚至在facebook上添加了你的原因,如果你在Facebook上看到巴西的請求,你知道這是我哈哈,很高興有這樣的優秀程序員。我對我的回答反應過度,但整個下午我都在牆上打了我的頭,所以我們走了。 – Grego 2012-03-29 20:57:13

+0

@Grego:確保你實際上'刪除了'那個指針在某個地方是健全的,否則你會發現一個經典的內存泄漏。 – ildjarn 2012-03-29 21:20:34

0

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

+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

相關問題