gpt4 book ai didi

c++ - 如何在类中正确使用结构?

转载 作者:太空狗 更新时间:2023-10-29 19:55:49 25 4
gpt4 key购买 nike

使用:VS2008、Win32、C/C++

我试图将我的整个对话框窗口封装到一个类中以实现可重用性。有点像自定义控件。在这样做的过程中,我将我的单独功能移动到一个类中。尽管以下结构设计给我带来了问题,但 Visual Studio 输出:错误 C2334“{”。

这是一个简单的消息映射布局。但我似乎无法逃避这个 C2334 错误。 :(

这是我的类(class)代码片段。

class CScrollingListDlg
{
private:

LRESULT DoCommandMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
LRESULT DoPaintMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
LRESULT DoAnimationTimer (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
LRESULT DoHandleTouch (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
LRESULT DoDestroyMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);

//
// message maps
//
// Generic defines and data types.
struct decodeUINT {
UINT Code;
LRESULT (*Fxn)(HWND, UINT, WPARAM, LPARAM);
};

struct decodeCMD {
UINT Code;
LRESULT (*Fxn)(HWND, WORD, HWND, WORD);
};

// WM_Message dispatch table for MainWndProc.

//
// *** error C2334 '{' ***
//
const struct decodeUINT MainMessages[] = {
WM_PAINT, DoPaintMain,
WM_DESTROY, DoDestroyMain,
WM_QUIT, DoDestroyMain,
WM_COMMAND, DoCommandMain,
};


};

我在这里错过了什么?

谢谢。

最佳答案

您不能以这种方式为非static 成员指定初始值设定项——您通常需要声明数组,然后在构造函数中填充它……除此之外,实际上没有办法在 C++ 中初始化 const 成员数组(参见 this thread )。

如果您准备在所有 CScrollingListDlg 实例之间共享 MainMessages(我怀疑这一直是您的意图),您应该将其设置为static,在这种情况下你可以声明:

static const decodeUINT MainMessages[];  // "struct" keyword unnecessary

CScrollingListDlg的类定义里面,然后在类外定义:

const CScrollingListDlg::decodeUINT CScrollingListDlg::MainMessages[] = {
WM_PAINT, DoPaintMain,
WM_DESTROY, DoDestroyMain,
WM_QUIT, DoDestroyMain,
WM_COMMAND, DoCommandMain, // The comma *is* allowed -- thanks Josh!
};

为了使其真正编译,您需要将 DoPaintMain()DoDestroyMain() 等设置为 static嗯——就目前而言,它们都是隐式采用 this 指针的每个对象方法,因此它们实际上不能包含在 LRESULT (*Fxn) 类型的函数指针中(HWND、UINT、WPARAM、LPARAM)。 (您可以将它们保留为非静态方法,并将 decodeUINT 中的指针类型更改为指向成员函数的指针类型,但这可能不是您想要的。)

[编辑:感谢 Josh 的一些有用评论!]

关于c++ - 如何在类中正确使用结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/768982/

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