转发声明未命名结构的typedef

时间:2012-04-20 15:59:47

标签: c++ forward-declaration

  

可能重复:
  Forward declarations of unnamed struct

如果我有

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

我可以向前宣布

struct tagPAGERANGE;
typedef struct tagPAGERANGE PAGERANGE;

但我拥有的是

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

我不知道怎么做。我只想拥有一个指向这个结构的指针。现在我坚持要么包含一个相当实质的标题,要么重复结构的定义。

2 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:2)

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

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

struct foo; // forward declaration

struct foo {
    // … implementation
};

typedef没用。