这是我之前提出的问题的后续措施,但是所提供的答案导致出现新问题。我有自己的Grid类,如下所示:
class Grid{
public:
Grid(HWND wnd);
void paint(CDC &dc, int sqr, bool axis); //paint the grid
void tag(CDC &dc);
private:
int square; //square size
CRect frame; //client area size
};
和
#include "stdafx.h"
#include "Grid.h"
Grid::Grid(HWND wnd)
{
CRect rect;
GetClientRect(wnd, &rect); // get client area size
frame.left = rect.right / 2 - 387; // fit frame to margin
frame.right = frame.left + 774;
frame.top = rect.bottom - 874;
frame.bottom = rect.bottom - 100;
}
[...]
现在,我想将它们包括在MFC应用程序向导提供的CMainFrame类中,这就是为什么我在MainFrm.h中添加以下内容:
#pragma once
#include "ChildView.h"
#include "Grid.h"
class CMainFrame : public CFrameWnd
{
[...]
Grid myGrid(HWND wnd = NULL);
[...]
}
然后添加到MainFrm.cpp中:
#include "stdafx.h"
#include "GridTargets.h"
#include "MainFrm.h"
#include "Grid.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMainFrame construction/destruction
Grid myGrid;
CMainFrame::CMainFrame() : myGrid(GetSafeHwnd())
{}
CMainFrame::~CMainFrame()
{
}
[...]
但是编译器给出了一些与MainFrame.cpp有关的错误,它们是:
Error 3 error C2600: 'CMainFrame::CMainFrame' : cannot define a compiler-generated special member function (must be declared in the class first) c:\users\michen\documents\repos\gridtargets\gridtargets\mainfrm.cpp 31 1 GridTargets
Error 4 error C2436: 'myGrid' : member function or nested class in constructor initializer list c:\users\michen\documents\repos\gridtargets\gridtargets\mainfrm.cpp 32 1 GridTargets
Error 5 error C2228: left of '.paint' must have class/struct/union c:\users\michen\documents\repos\gridtargets\gridtargets\mainfrm.cpp 142 1 GridTargets
Error 2 error C2079: 'myGrid' uses undefined class 'Grid' c:\users\michen\documents\repos\gridtargets\gridtargets\mainfrm.cpp 29 1 GridTargets
Error 1 error C2011: 'Grid' : 'class' type redefinition c:\users\michen\documents\repos\gridtargets\gridtargets\grid.h 1 1 GridTargets
有人可以告诉我我哪里出问题了吗?
问候,
米申
最佳答案
我不得不猜测一下,没有其余的代码,但是至少一些错误应该是清楚的:
错误3错误C2600:'CMainFrame :: CMainFrame':无法定义编译器生成的特殊成员函数(必须首先在类中声明)c:\ users \ michen \ documents \ repos \ gridtargets \ gridtargets \ mainfrm.cpp 31 1 GridTargets
这是因为您没有在“ CMainFrame”中声明构造函数。 C ++会为您插入一个构造函数,但也会插入一个实现。
错误4错误C2436:“ myGrid”:构造函数初始值设定项列表中的成员函数或嵌套类c:\ users \ michen \ documents \ repos \ gridtargets \ gridtargets \ mainfrm.cpp 32 1 GridTargets
我不确定...但是我相信这也是因为您没有定义构造函数,并且它不能初始化成员变量。
错误5错误C2228:'.paint'的左侧必须具有class / struct / union c:\ users \ michen \ documents \ repos \ gridtargets \ gridtargets \ mainfrm.cpp 142 1 GridTargets
我将不得不查看相应的代码。
错误2错误C2079:'myGrid'使用未定义的类'Grid'c:\ users \ michen \ documents \ repos \ gridtargets \ gridtargets \ mainfrm.cpp 29 1 GridTargets
您可能忘记了包含“ Grid.h”?
错误1错误C2011:'Grid':'class'类型重新定义c:\ users \ michen \ documents \ repos \ gridtargets \ gridtargets \ grid.h 1 1 GridTargets
看来您缺少代码保护。地点:
#ifndef GRID_H
#define GRID_H
[...]
#endif
在您的Grid.h文件中。
关于c++ - 将自己的C++类添加到现有的MFC应用程序中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35988598/