Разделение события клика из .h (код дизайнера) в файл .cpp

Я столкнулся с проблемой организации формы приложения Windows, с которой мне нужна помощь. Сейчас код делается в Microsoft Studio 2010 в .net 4.0 на С++. Файл заголовка для приложения с графическим интерфейсом не организован, что потенциально может привести к 10 000 или более строк кода, что делает его очень трудным для чтения.

Я пытался разделить реализацию события клика на файл .cpp, который включал «Form1.h».

private:
    System::Void sIToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e){
        switch(this->USCustomaryFlg){
        case true:
            this->sIToolStripMenuItem->Checked = true;
            this->mnuUSMetric->Checked = false;
            this->USCustomaryFlg = false;
            cout << "SI flag is now true." << endl;
            break;
        case false:
            break;
        }
    }

в эту форму в файле .cpp Form1:

System::Void mnuUSMetric_Click(System::Object^  sender, System::EventArgs^  e){
    switch(this->USCustomaryFlg){
    case true:
        cout << "USCustomaryFlg is now false." << endl;
        break;
    case false:
        this->mnuUSMetric->Checked = true;
        this->USCustomaryFlg = true;
        this->sIToolStripMenuItem->Checked = false;
        cout << "USCustomaryFlg is now true." << endl;
        break;
    }
}

Ошибка, которую я получаю, - это всего лишь образец того, что я получаю:

Ошибка 2 ошибка C2355: 'this': на нее можно ссылаться только внутри нестатических функций-членов E:\Summer 2011\Engineer Software\GUItest\GUItest\Form1.cpp 16

Ошибка 4 ошибка C2355: 'this': на нее можно ссылаться только внутри нестатических функций-членов E:\Summer 2011\Engineer Software\GUItest\GUItest\Form1.cpp 21

Ошибка 3 ошибка C2227: слева от '->USCustomaryFlg' должен указывать на класс/структуру/объединение/общий тип E:\Summer 2011\Engineer Software\GUItest\GUItest\Form1.cpp 16

Ошибка 8 ошибка C2227: слева от '->USCustomaryFlg' должен указывать на класс/структуру/объединение/общий тип E:\Summer 2011\Engineer Software\GUItest\GUItest\Form1.cpp 22

Есть мысли по этому поводу?


person Wes    schedule 21.06.2011    source источник
comment
Это не С++. Я изменил его тег соответственно.   -  person Billy ONeal    schedule 21.06.2011


Ответы (1)


Если ваш метод C++ определен (т. е. его тело написано) отдельно от его объявления (т. е. это сигнатура внутри класса), вам необходимо указать перед определением метода имя класса.

Например. если ваш класс называется MyForm, определение должно быть

System::Void MyForm::mnuUSMetric_Click(System::Object^  sender, System::EventArgs^  e){
    ...
}
person elder_george    schedule 21.06.2011
comment
Да, и оставить объявление метода в файле .h. - person Hans Passant; 21.06.2011
comment
Он никогда не определяется отдельно от его определения, потому что его определение по определению находится там, где оно было определено. Я думаю, вы имели в виду объявление. - person Ben Voigt; 21.06.2011