Переадресация объявления typedef неназванной структуры [duplicate]

Возможные Дубликаты:
вперед объявления неназванной структуры

если у меня есть

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

Я могу вперед объявить его таким образом

struct tagPAGERANGE;
typedef struct tagPAGERANGE PAGERANGE;

но у меня есть

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

Я не уверен, как я могу сделать это. Я только хочу держать указатель на эту структуру. Прямо сейчас я застрял либо с включением довольно существенного заголовка, либо с дублированием определения структура.

2 ответов


Это невозможно. Вы можете объявлять только именованные структуры.

подумайте о том, что идентифицирует структуру, у которой нет имени, и как вы говорите компилятору, что это та структура, которую вы хотите. Если у него нет имени, он идентифицируется его членами, поэтому вам нужно предоставить члены - т. е. определить его. Поэтому вы не можете просто объявить его-у вас нет роскоши идентификатора, кроме самого определения.


поскольку это используется в коде C++, просто избавьтесь от typedefs вообще, они ненужны и плохой стиль в C++.

реальное решение-просто использовать именованные структуры:

struct foo; // forward declaration

struct foo {
    // … implementation
};

typedefs не полезны.