Я создаю 3d-художника на C++ с OpenGL и MFC. Я создал диалоговые окна для создания каждой фигуры, которая у меня есть: как куб, цилиндр и т. Д. Мой класс куба наследует класс цилиндров с разницей в количестве стека и фрагментов. Следовательно, диалог CreateCylinder должен выглядеть так же, как диалог CreateCube. я смог унаследовать его хорошо, но у меня есть ошибка, которая говорит:Как правильно наследовать диалоги в MFC
Error 6 error C2065: 'IDD_BASEWIN_DIALOG' : undeclared identifier c:\users\l122\desktop\opengl\opengl\basewindlg.h 19 1 OpenGL
Это происходит каждый новый сборник после некоторых незначительных изменений коды.
Чтобы это исправить, я закомментировать эту строку:
enum { IDD = IDD_BASEWIN_DIALOG };
затем компилировать и раскомментируйте ту же линию, что помогает в следующей компиляции работать нормально.
То, как я унаследовал класс диалогового окна CreateCylinder в моем классе диалога CreateCube:
IMPLEMENT_DYNAMIC(CreateCube, CreateCylinder)
CreateCube::CreateCube()
: CreateCylinder(this->GetSafeOwner())
{
}
CreateCube::~CreateCube()
{
}
void CreateCube::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
CreateCylinder::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CreateCube, CreateCylinder)
END_MESSAGE_MAP()
и я также редактировал эту строку в конструкторе CreateCylinder:
CreateCylinder::CreateCylinder(CWnd* pParent /*=NULL*/)
: CDialogEx(CreateCylinder::IDD, this->GetSafeOwner())
Заголовочный файл:
#pragma once
#include "CreateCylinder.h"
// CreateCube dialog
class CreateCube : public CreateCylinder
{
DECLARE_DYNAMIC(CreateCube)
public:
CreateCube(); // standard constructor
virtual ~CreateCube();
// Dialog Data
enum { IDD = IDD_CREATE_CUBE_DLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
};
Я хочу знать, что я сделал неправильно с наследованием. необходимо ли отправить указатель родителя в базовый диалог, как я? И ошибка выше должна что-нибудь с этим делать?
Не могли бы вы также поделиться заголовком (декларация класса)? Также является 'CreateCylinder' ваш класс или часть некоторой библиотеки? Он не похож на часть MFC, так как классы MFC имеют префикс 'C', поэтому он должен быть' CCreateCylinder'. –
Я добавил код заголовка в свой пост. И да, CreateCylinder - это класс, это была моя ошибка, чтобы не называть его правильным (CCreateCylinderDlg). Можно ли поменять его имя с помощью мастера (в Visual Studio), не беспокоясь о тоннах ошибок, которые будут связаны с этим изменением? – serg90
Если вы не испортили «метку мастера» в своем коде, вы должны иметь возможность изменить имя класса с помощью мастера. –