结构的前向声明不起作用 - 无法弄清楚为什么
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
只声明 pointers 到 BEAST_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
)。
我正在尝试对结构进行前向声明。但是没用。
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
只声明 pointers 到 BEAST_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
)。