Я хотел бы использовать вложенные классы как часть приложения, которое я создаю.Первый фрагмент кода, который у меня есть (заголовочный файл, в который я включил код для этого вопроса), выглядит следующим образом:
class Window {
public:
indev::Thunk32<Window, void ( int, int, int, int, void* )> simpleCallbackThunk;
Window() {
simpleCallbackThunk.initializeThunk(this, &Window::mouseHandler); // May throw std::exception
}
~Window();
class WindowWithCropMaxSquare;
class WindowWithCropSelection;
class WindowWithoutCrop;
virtual void mouseHandler( int event, int x, int y, int flags, void *param ) {
printf("Father");
}
private:
void assignMouseHandler( CvMouseCallback mouseHandler );
};
class Window::WindowWithCropMaxSquare : public Window {
public:
WindowWithCropMaxSquare( char* name );
virtual void mouseHandler( int event, int x, int y, int flags, void *param ) {
printf("WWCMS");
}
};
class Window::WindowWithCropSelection : public Window {
public:
WindowWithCropSelection( char* name );
virtual void mouseHandler( int event, int x, int y, int flags, void *param ) {
printf("WWCS");
}
};
class Window::WindowWithoutCrop : public Window {
public:
WindowWithoutCrop( char* name );
virtual void mouseHandler( int event, int x, int y, int flags, void *param ) {
printf("WWOC");
}
};
Теперь я хочу создать экземпляр класса WindowWithCropMaxSquare
в MAIN и выполнить mouseHandler
function.
В MAIN у меня есть
Window::WindowWithCropMaxSquare *win = new Window::WindowWithCropMaxSquare("oopa");
win->mouseHandler(1,1,1,1,0);
Однако это вызывает проблему на этапе связывания.Я получил следующую ошибку:
Ошибка 1 ошибка LNK2019: неразрешенный внешний символ "public: __thiscall Window :: WindowWithCropMaxSquare :: WindowWithCropMaxSquare (char *)" (?? 0WindowWithCropMaxSquare @ Window @@ QAE @ PAD@Z) упоминается в функции _main c: \ Users \ Nicolas \ documents \ visual studio 2010 \ Projects \ AFRTProject \ AFRTProject \ AFRTProject.obj
Итак, кто-нибудь может сообщить мне, как решить эту проблемупроблема?