我已经在这个主题上阅读了关于SO的类似主题(How to initialize a Pointer to a struct in C?和
Initializing a pointer to a structure)
但尝试new
或malloc
失败了。我有一堆typedefs
喜欢
typedef void (*STP_CALLBACK_ON_TOPOLOGY_CHANGED) (BRIDGE* bridge);
typedef void* (*STP_CALLBACK_ALLOC_AND_ZERO_MEMORY) (unsigned int size);
typedef void (*STP_CALLBACK_FREE_MEMORY) (void* p);
typedef void (*STP_CALLBACK_ENABLE_LEARNING) (BRIDGE* bridge, unsigned int portIndex, unsigned int treeIndex, bool enable);
形成一个结构
struct STP_CALLBACKS
{
STP_CALLBACK_ON_TOPOLOGY_CHANGED onTopologyChanged;
STP_CALLBACK_ALLOC_AND_ZERO_MEMORY allocAndZeroMemory;
STP_CALLBACK_FREE_MEMORY freeMemory;
...
};
当我想用
初始化一个指向这个结构的指针时const STP_CALLBACKS *callbacks = new STP_CALLBACKS;
它实际上没有任何东西。我是一个新手,显然错过了重要的事情。这是一种正确的方法吗?
P.S。上面的代码来自mstp-lib。我在VS2015。
答案 0 :(得分:1)
因为您实际上没有初始化。 Typedef只声明一个类型。上面new
所做的就是为4个函数指针分配内存。
要初始化此内存,您需要构造函数:
struct STP_CALLBACKS {
STP_CALLBACKS(STP_CALLBACK_ON_TOPOLOGY_CHANGED _fp1, ...
...
然后,将实际函数调用为func1,func2,......您可以初始化结构:
void func1(BRIDGE* bridge) {
...
}
STP_CALLBACKS callbacks(func1, ...
然后回复你的功能:
BRIDGE bridge;
callbacks.onTopologyChanged(&bridge);