Visual C ++ / CLI взаимный доступ между двумя объектами класса? - PullRequest
0 голосов
/ 15 октября 2010

Вот проблема:

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;'

Тогда ошибка:

ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором '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'

 } }

Но я также могу переместить код объявления «RunnableThread» перед «пространством имен Program1», потому что «RunnableThread» использует указатель на отца «Form1», который создал экземпляр этого класса.

Как решить эту проблему?

Спасибо за любой ответ.

1 Ответ

1 голос
/ 15 октября 2010

Добавить предварительную декларацию до class Form1:

class RunnableThread;

вероятно с ref впереди.

...