OpenGLとMFCを使用してC++で3Dペインタを構築しています。 私が持っているすべての図形を作成するためのダイアログを作成しました:キューブ、円柱など... 私のcubeクラスは、スタックとスライスの量の差だけを使ってシリンダクラスを継承します。 したがって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 };
その後、正常に動作するには、次のコンパイルに役立ちます同じ行を、コンパイルしてコメントを解除します。
それ私は私のCREATECUBEダイアログクラスにCreateCylinderダイアログクラスを継承する方法:
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クラスには 'C'プレフィックスがあるので、それは' CCreateCylinder'でなければなりません。 –
私は自分の投稿にヘッダファイルのコードを追加しました。そして、はい、CreateCylinderはクラスです、それは正しく(CCreateCylinderDlg)の名前を付けないのは間違いでした。その変更に関連するエラーの数を心配することなく、(Visual Studioで)ウィザードで名前を変更することは可能ですか? – serg90
コードに「ウィザードのマーキング」が表示されない場合は、ウィザードを使用してクラスの名前を変更できるはずです。 –