Как использовать отдельный файл .cpp для определений функций событий в формах Windows?

У меня проблемы с определением моих функций событий C ++ в формах Windows.

Я хочу определить свои функции событий (пример: нажатие кнопки) в отдельном файле .cpp вместо того, чтобы выполнять все определения функций в файле .h форм Windows, который уже заполнен сгенерированным кодом для графического интерфейса форм Windows.

Я пробовал сделать это, объявление внутри класса Form1.h:

private: System::Void ganttBar1_Paint
(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e);

А это определение внутри класса Form1.cpp:

#include "Form1.h"

System::Void Form1::ganttBar1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e)
{
    // Definition
}

Когда я это делаю, я получаю ошибки компилятора в файле .cpp, в которых говорится, что это не имя класса или пространства имен.

Что я могу сделать, чтобы получить определения и объявления функций событий в отдельных файлах?

Я просто дурак и что-то здесь упускаю, или мне нужно делать это иначе, чем стандарт C ++?


person Kersch    schedule 24.04.2012    source источник
comment
не уверен, что это имеет какое-то отношение к стандарту C ++, разве это не обоснование дизайна C ++ / cli?   -  person EdChum    schedule 25.04.2012
comment
@EdChum: Это не столько дизайн обоснование, сколько плохой генератор кода WinForms, который не знает, как отделить объявления от определений.   -  person ildjarn    schedule 25.04.2012
comment
@ildjarn извинения, просто перечитайте последнюю строку и поймите, что говорит OP, хотя сообщение сгенерированного кода поможет   -  person EdChum    schedule 25.04.2012


Ответы (1)


Определение вашего класса, скорее всего, находится внутри некоторого пространства имен (я буду использовать Project1 в качестве заполнителя):

#pragma once

namespace Project1
{
    ref class Form1 : public System::Windows::Forms::Form
    {
        // ...
    };
}

Следовательно, ваше определение также должно быть:

#include "Form1.h"

namespace Project1
{
    void Form1::ganttBar1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e)
    {
        // definition
    }
}

or

#include "Form1.h"

void Project1::Form1::ganttBar1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e)
{
    // definition
}
person ildjarn    schedule 24.04.2012
comment
Спасибо! Я забыл про пространство имен, теперь оно работает как шарм! - person Kersch; 25.04.2012