C++ 在C+中相互使用的两种类型+;
在头文件中,我有一个函数指针和一个结构:C++ 在C+中相互使用的两种类型+;,c++,types,header,destructor,header-files,C++,Types,Header,Destructor,Header Files,在头文件中,我有一个函数指针和一个结构: typedef struct _CONTINUE_STATE { DWORD CurrentCycle; CommandProc* CommandFunc; void* Resered; } CONTINUE_STATE, *PCONTINUE_STATE; -- 问题是CommandProc和CONTINUE_状态都相互使用。函数使用结构作为参数,结构使用函数作为成员。这会导致问题,因为无论哪种类型位于标头顶部,都无法找到它使
typedef struct _CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
} CONTINUE_STATE, *PCONTINUE_STATE;
--
问题是CommandProc和CONTINUE_状态都相互使用。函数使用结构作为参数,结构使用函数作为成员。这会导致问题,因为无论哪种类型位于标头顶部,都无法找到它使用的类型
提前谢谢
编辑:我知道我可以在结构中使用void*作为func类型,然后稍后再将其强制转换,但我想知道是否有更好的方法。向前声明
结构
:
struct _CONTINUE_STATE;
typedef struct _CONTINUE_STATE CONTINUE_STATE, *PCONTINUE_STATE;
typedef HRESULT (*CommandProc)(SOCKET client, char* command, char* response,
CONTINUE_STATE* continueProc);
struct _CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
};
正向声明
结构
:
struct _CONTINUE_STATE;
typedef struct _CONTINUE_STATE CONTINUE_STATE, *PCONTINUE_STATE;
typedef HRESULT (*CommandProc)(SOCKET client, char* command, char* response,
CONTINUE_STATE* continueProc);
struct _CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
};
非常简单,您只需向前声明
\u CONTINUE\u STATE
(顺便说一句,这是一个可怕的、可能尚未定义的类型名称),然后仍然在typedef中使用它。你不需要在C++中这样的TyBueFF结构。< P>很简单,你只需提前声明struct CONTINUE_STATE;
typedef HRESULT (*CommandProc)(SOCKET client, char* command, char* response, CONTINUE_STATE* continueProc);
typedef struct _CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
} CONTINUE_STATE, *PCONTINUE_STATE;
你必须使用预先声明
struct CONTINUE_STATE;
typedef HRESULT (*CommandProc)(SOCKET client, char* command, char* response, CONTINUE_STATE* continueProc);
typedef struct _CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
} CONTINUE_STATE, *PCONTINUE_STATE;
首先:
typedef struct _CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
} CONTINUE_STATE, *PCONTINUE_STATE;
不需要typedef,也不应该使用typedef指针。让我们这样做:
struct _CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
};
接下来,保留以下划线A和大写字母开头的名称,因此:
struct CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
};
而且,如果您确实需要相互引用的类型名,这在您的代码中并不明显,也不是很常用,那么:
struct CONTINUE_STATE {
DWORD CurrentCycle;
struct CommandProc * CommandFunc; // forward declaration
void* Resered;
};
最后,C++中的约定类型名称为混合情况,大写为常数保留,因此:
struct ContinueState {
DWORD CurrentCycle;
struct CommandProc * CommandFunc; // forward declaration
void* Resered;
};
首先:
typedef struct _CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
} CONTINUE_STATE, *PCONTINUE_STATE;
不需要typedef,也不应该使用typedef指针。让我们这样做:
struct _CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
};
接下来,保留以下划线A和大写字母开头的名称,因此:
struct CONTINUE_STATE {
DWORD CurrentCycle;
CommandProc* CommandFunc;
void* Resered;
};
而且,如果您确实需要相互引用的类型名,这在您的代码中并不明显,也不是很常用,那么:
struct CONTINUE_STATE {
DWORD CurrentCycle;
struct CommandProc * CommandFunc; // forward declaration
void* Resered;
};
最后,C++中的约定类型名称为混合情况,大写为常数保留,因此:
struct ContinueState {
DWORD CurrentCycle;
struct CommandProc * CommandFunc; // forward declaration
void* Resered;
};
我们真的需要一个常见问题解答。我们真的需要一个常见问题解答。