这是我之前提出的问题的后续措施,但是所提供的答案导致出现新问题。我有自己的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/

10-11 22:41