8

可能重复:
未命名结构的前向声明

如果我有

typedef struct tagPAGERANGE
{
    int iFirstPage;
    int iLastPage;
} PAGERANGE;

我可以这样转发声明

struct tagPAGERANGE;
typedef struct tagPAGERANGE PAGERANGE;

但我所拥有的是

typedef struct
{
    int iFirstPage;
    int iLastPage;
} PAGERANGE;

我不确定我该怎么做。我只想持有一个指向这个结构的指针。现在我要么包含一个相当大的标题,要么复制结构的定义。

4

2 回答 2

13

不可能。您只能声明命名结构。

想想是什么标识了一个没有名称的结构,以及如何告诉编译器它就是你想要的那个结构。如果它没有名称,则由其成员标识,因此您需要提供成员——即定义它。因此,您不能声明它——除了定义本身之外,您没有奢侈的标识符。

于 2012-04-20T16:02:09.897 回答
2

由于这是在 C++ 代码中使用的,所以完全摆脱 typedef,它们在 C++ 中是不必要的和不好的风格。

真正的解决方案是只使用命名结构:

struct foo; // forward declaration

struct foo {
    // … implementation
};

typedef 没有用。

于 2012-04-20T16:15:47.310 回答