4

我正在尝试创建一个结构,其中包含一个类型为同一结构的向量。但是,当我构建时,错误表明我缺少“;” 在“>”出现之前。我不确定编译器是否甚至将向量识别为事物:/并且我已经包含在我的代码中。这是我到目前为止所拥有的:

#include <vector>

typedef struct tnode
{
    int data;
    vector<tnode> children;
    GLfloat x; //x coordinate of node 
    GLfloat y; //y coordinate of node
} tnode;

任何帮助将不胜感激!!

4

2 回答 2

6

您的代码正在调用未定义的行为,因为标准容器vector不能包含不完整的类型,并且tnode是结构定义中的不完整类型。根据 C++11 标准,17.6.4.8p2:

在以下情况下效果未定义: [...] 如果在实例化模板组件时将不完整的类型 (3.9) 用作模板参数,除非该组件特别允许。

Boost.Container 库vector提供了可以包含不完整类型的替代容器(包括)。递归数据类型(例如您想要的那种)作为此用例给出。

以下内容适用于 Boost.Container:

#include <boost/container/vector.hpp>
struct tnode
{
    int data;

    //tnode is an incomplete type here, but that's allowed with Boost.Container
    boost::container::vector<tnode> children;

    GLfloat x; //x coordinate of node 
    GLfloat y; //y coordinate of node
};
于 2013-06-26T16:36:08.393 回答
3

您所拥有的不符合标准(感谢@jonathanwakely 确认)。所以它是未定义的行为,即使它在一些流行的平台上编译。

boost 容器库有一些支持此功能的标准库类容器,因此您原则上可以修改您的结构以使用其中之一:

#include <boost/container/vector.hpp>
struct tnode
{
    int data;
    boost::container::vector<tnode> children;
    GLfloat x; //x coordinate of node 
    GLfloat y; //y coordinate of node
};
于 2013-06-26T16:27:56.640 回答