2017-04-10 169 views
-1

我已閱讀上如此相似線程關於這個主題(How to initialize a Pointer to a struct in C?Initializing a pointer to a structure) ,但沒有試圖newmalloc的結構。我有一大堆的typedefs初始化指針的typedef

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; 

它實際上inits什麼。我是一個新手,顯然錯過了一些重要的事情。什麼是正確的做法?

P.S.上面的代碼是從mstp-lib。我在VS2015。

+1

它們是函數指針.... –

+1

你想用什麼初始化它們? – doctorlove

+0

@doctorlove在下一個函數中使用 - [STP_CreateBridge](https://sourceforge.net/p/mstp-lib/code/HEAD/tree/trunk/_help/STP_CreateBridge.html) – Alexandr

回答

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);