【问题标题】:Initializing a pointer to structure of typedefs初始化指向 typedef 结构的指针
【发布时间】:2017-04-10 10:36:59
【问题描述】:

我已经阅读了关于这个主题的类似主题(How to initialize a Pointer to a struct in C?Initializing a pointer to a structure) 但尝试newmalloc 失败。我有一堆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;

它实际上什么都没有。我是一个新手,显然错过了一些重要的事情。什么是正确的方法?

附:上面的代码来自mstp-lib。我在VS2015上。

【问题讨论】:

  • 它们是函数指针......
  • 你想用什么初始化它们?
  • @doctorlove 在下一个函数中使用 - STP_CreateBridge
  • 你没有告诉它初始化内容。由于您将其声明为 const,除非您定义构造函数,否则您将很难设置成员。您不需要动态分配。您只需要决定指向哪些函数,或者将它们设置为 nullptr。
  • 我没有问为什么——我问的是什么。你需要告诉它函数指针应该指向什么。如果您显示您希望它指向的功能,我们可以告诉您如何操作。

标签: c++ pointers struct


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多