gpt4 book ai didi

c++ - 将自己的 C++ 类添加到现有的 MFC 应用程序中

转载 作者:行者123 更新时间:2023-11-28 02:10:10 25 4
gpt4 key购买 nike

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

谁能告诉我哪里出错了?

问候,米琴

最佳答案

我不得不猜测一点,没有其余的代码,但至少应该清楚一些错误:

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

这是因为您没有在“CMainFrame”中声明构造函数。 C++ 为您插入一个构造函数,但也插入一个实现。

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

您可能忘记包含“Grid.h”?

Error 1 error C2011: 'Grid' : 'class' type redefinition 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com