Разделение события клика из .h (код конструктора) в файл .cpp - PullRequest
2 голосов
/ 21 июня 2011

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

Я пытался разделить реализацию события click в файле .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 * ​​1022 *

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

1 Ответ

4 голосов
/ 21 июня 2011

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

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

System::Void MyForm::mnuUSMetric_Click(System::Object^  sender, System::EventArgs^  e){
    ...
}
...