struct的前向声明不起作用-无法弄清原因

时间:2018-08-09 12:31:03

标签: c++ struct forward-declaration

我正在尝试对结构进行正向声明。但这不起作用。

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”

我为我的所有结构制作了一个简单的头文件。 怎么了?

最佳 星牛

1 个答案:

答案 0 :(得分:1)

向前声明一个类可以使您用它做一些事情,但不是全部。

声明该类的实例不是这些事情之一。不仅需要名称,还需要更多信息。您需要首先提供其实际定义。

如果"exportKeys"仅向BEAST_Vertex声明了 pointers ,那么您会没事的(编译器始终知道指针是什么)。

幸运的是,至少在这个人为的示例中,解决方法很简单:交换类定义并删除前向声明:

BEAST_Coord2D

顺便说一句,您在这里使用了不必要的C惯用语。 C ++前向声明如下所示:

struct BEAST_Coord2D
{
    float x;
    float y;
};

struct BEAST_Vertex
{
    BEAST_Coord2D absolut;
    BEAST_Coord2D relativ;
};

相反,您要做的是将前向声明与struct BEAST_Coord2D; struct BEAST_Vertex; 混合使用(C习惯用法是为了避免以后再到处都写typedef),这是完全有效的,但不是必须的在C ++中(不需要您始终先写struct)。