结构的前向声明不起作用 - 无法弄清楚为什么

forward declaration of struct doesn't work - can't figure out why

我正在尝试对结构进行前向声明。但是没用。

typedef struct BEAST_Coord2D BEAST_Coord2D;
typedef struct BEAST_Vertex BEAST_Vertex;

struct BEAST_Vertex {
    BEAST_Coord2D absolut;
    BEAST_Coord2D relativ;
};

struct BEAST_Coord2D {
    float x;
    float y;
};

Visual Studio 2017 说: “错误 C2079:'BEAST_Vertex::absolut' 使用未定义的结构 'BEAST_Coord2D' 错误 C2079:'BEAST_Vertex::relativ' 使用未定义的结构 'BEAST_Coord2D'

我为我的所有结构创建了一个简单的头文件。 这里有什么问题?

最佳 星牛

向前声明一个 class 允许你用它做一些事情,但不是所有事情。

声明一个 class 的实例不是其中之一。为此需要更多信息,而不仅仅是其名称;您需要先提供其实际定义。

如果 BEAST_Vertex 只声明 pointersBEAST_Coord2D 那么你就没问题了(编译器总是知道指针是什么)。

幸运的是,至少在这个人为设计的示例中,修复很简单:交换 class 定义并删除前向声明:

struct BEAST_Coord2D
{
    float x;
    float y;
};

struct BEAST_Vertex
{
    BEAST_Coord2D absolut;
    BEAST_Coord2D relativ;
};

顺便说一句,您在这里使用了不必要的 C 习语。 C++ 前向声明看起来像这样:

struct BEAST_Coord2D;
struct BEAST_Vertex;

你所做的是将前向声明与 typedef 混合(C 惯用语用于消除以后在任何地方继续写 struct 的需要),这是完全有效的但是在 C++ 中不是必需的(它不需要您首先继续编写 struct)。