2012-04-19 2 views
1

Я новичок в разработке в C++ для Windows, ..C++ для окон структуры

Я пытаюсь создать STRUC, который будет иметь указатель на другую структуру ...

Как это возможно?

struct InitialNode { 
    Node * nextNode; 
    Node * lowerNode; 
} InitialNode; 

struct Node { 
    Node * nextNode; 
    Node * lowerNode; 
    int value; 
} Node; 

Ошибка выделяется в структуре InitialNode, где Node * nextNode; и Node * lowerNode .. ..

Любые идеи?

спасибо заранее :)

+0

Это не относится к Windows, все компиляторы C++ имеют одни и те же правила. Все они компилируются сверху вниз, за ​​исключением методов класса (которые всегда скомпилируются после самого класса) – MSalters

+0

@Msalters .. спасибо за указание, что один из них: – cgval

ответ

4

Там несколько ошибок:

Во-первых, я уверен, что вы хотели typedef. Кроме того, вам нужно переслать, объявить Node перед InitialNode:

struct Node; 
typedef struct InitialNode { 
    Node * nextNode; 
    Node * lowerNode; 
} InitialNode; 

typedef struct Node { 
    Node * nextNode; 
    Node * lowerNode; 
    int value; 
} Node; 

Ваш синтаксис

struct A 
{ 
} A; 

попытки создать объект типа A имени A. Обратите внимание, что typedef struct является декларацией стиля C и не требуется в C++. Вы могли бы очень хорошо написать:

struct Node; 
struct InitialNode { 
    Node * nextNode; 
    Node * lowerNode; 
}; 
struct Node { 
    Node * nextNode; 
    Node * lowerNode; 
    int value; 
}; 
+0

typedef в этом случае не нужно, хотя рекомендуется http: // stackoverflow.com/questions/612328/difference-between-struct-and-typedef-struct-in-c – EdChum

+1

@EdChum Я не вижу, где говорится, что он рекомендуется для C++. На самом деле есть несколько ответов, в которых говорится, что для C++ это не имеет значения. –

+0

да, вы правы, но это еще не обязательно – EdChum

4

В C++ идентификатор может использоваться только ПОСЛЕ его объявления. Попробуйте это:

struct Node { 
    Node * nextNode; 
    Node * lowerNode; 
    int value; 
}; 

struct InitialNode { 
    Node * nextNode; 
    Node * lowerNode; 
} InitialNode; 

Определение Node Перед InitialNode должны решить вашу проблему

+0

@happy_emi .. спасибо mate :) – cgval

Смежные вопросы