2010-10-15 74 views
0

這裏的問題是:Visual C++/CLI兩個類對象之間的相互訪問?

namespace Program1 { 
    public ref class Form1 : public System::Windows::Forms::Form 
    { 
    public: Form1(void) {....} 
     private: RunnableThread^ peerThread; 

    private: System::Void loginButton_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { 
    String^ ip = this->ipTextField->Text; 
    String^ port = this->portTextField->Text; 
     <.............> 
     // Start new thread 
     this->peerThread = gcnew RunnableThread("thread2", ip, port, this->gameMatrix, this); 
     <..............> 
    } 
} 

    } 


// Runnable class 
ref class RunnableThread 
{ 
private: 
    String^ ip; 
    String^ port; 
    <...> 
    EchoClient3WS::Form1^ refToRootObj; 
    <......> 
public: 
    RunnableThread(String^ threadName, String^ ip, String^ port, GameMatrix^ gameMatrix, Program1::Form1^ rootObj); 
    void run(); 
    void callServer(String^ message); 
    void done(); 
}; 

而且我得到了錯誤:

該生產線是:

'private: RunnableThread^ peerThread;' 

然後錯誤是:

error C2146: syntax error : missing ';' before identifier 'peerThread' k:\visual studio 2010\projects\program1\program1\Form1.h <....>


看來,這

namespace Program1 { public ref class Form: <...> { 
// HERE WE DON'T KNOW ANYTHING ABOUT THE CLASS NAMED 'RunnableThread' 

} } 

但我也可以「命名空間PROGRAM1」之前移動「RunnableThread」聲明代碼,因爲「RunnableThread」使用指針父親Form1的「,誰創造的一個實例這個班。

如何解決這個問題?

感謝您的任何答案。

+0

這個愚蠢的令人頭疼的問題是很多C++/CLI程序員轉向C#的原因之一。建議,C++/CLI中的winforms編程沒有優勢,也沒有未來。 – 2010-10-15 12:12:32

回答

1

class Form1前添加一個向前聲明:

class RunnableThread; 

可能與前面的ref