使用匿名结构初始化联合

时间:2018-06-30 01:30:05

标签: c++ c++11

我正在将树结构合并到一个库中。 有问题的库具有编译时检查功能,可防止用户在合并时留下未初始化的变量,以及其他检查功能。 我尝试合并的树结构具有类似

的结构
struct TreeNode
{
  int Dimension;
  int ChildIndex;
  union {
    struct
    { 
      float LMax;
      float RMin;
    } Node;
    struct
    {
      int Start;
      int Size;
    } Leaf;
  };

  TreeNode()
    : Dimension()
    , ChildIndex()
  {}
};

当我合并此类并编译库时,对于未由我初始化的联合,我收到-Wmissing-field-initializers警告。

我正在寻找一种在TreeNode的构造函数中初始化联合的方法。 谁能指出我该怎么做? 我还寻求建议,以更好地构造TreeNode。

1 个答案:

答案 0 :(得分:0)

据我从评论中了解到的,您只是想抑制警告。另外,看起来您正在使用GCC。您可以像下面这样实现:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"

struct TreeNode { ... };

#pragma GCC diagnostic pop

第二行在其后的代码中禁止显示-Wmissing-field-initializers警告。由于您不想在所有代码中都禁止显示此警告,因此需要保存警告设置(第一行),稍后再恢复(最后一行)。有关更多信息,请考虑阅读GCC docs