我正在尝试对结构进行正向声明。但这不起作用。
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”
我为我的所有结构制作了一个简单的头文件。 怎么了?
最佳 星牛
答案 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
)。