В моем (значительном) опыте это почти всегда означает программист на C, который пошарил в C++. Если это заметки из ваших классов, это не сулит ничего хорошего.
В ранней «C», если объявлен struct
struct StructName {
int a;
int b;
};
Это не объявлял имя типа, оно только объявлено имя структуры, так, чтобы сделать экземпляр StructName вы должны написать:
struct StructName myStruct;
Если вы хотите, чтобы иметь возможность опустить «StructName» часть, которую вы должны были бы использовать ЬурейеЕ:
struct StructName { int a, b; };
typedef struct StructName StructName;
Или вы могли бы объединить их в один, несколько запутанный, заявление:
typedef struct StructName { int a, b; } StructName;
Я говорю запутанным, потому что если struct
определение давно много линий, можно спутать второй синтаксис C, который позволяет объявить экземпляр из Struct после определения типа:
struct StructName { int a, b; } StructName;
// aka
struct StructName { int a, b; };
struct StructName StructName; // local variable, StructName of type struct StructName
// declare a VARIABLE called StructName which is of type anonymous-struct.
struct { int a, b; } StructName;
Одна проблема состоит в том, что вы не можете использовать typedef'd имя в структуре декларации:
// Won't compile because 'List' isn't declared until the end.
typedef struct list_structure { List* next; int a; } List;
// Won't compile because you have to remember to say 'struct List'
typedef struct List { List* next; int a; } List;
// Compiles
typedef struct list_structure { struct list_structure* next; int a; } List;
Это путало много программистов на С. Настолько, что многие программисты C скажут вам, что определение структуры является
typedef struct tag_name { /* struct details */ } structname;
//e.g.
typedef struct tagStructName { int a, b; } StructName;
C++ унаследовал все это, но и пошел вперед и сделал ЬурейеЕ подразумеваемой для вас:
// doesn't compile as C, will compile as C++
struct List {
List* next;
int a;
};
Чтобы увидеть он не компиляции в C: http://ideone.com/3r9TRy
В C++ объявить что-то, как класс точно же, как объявить его на структуру, с одним изменением:
class List {
List* next;
public:
int a;
};
Является ТОЧНО как если бы вы написали:
struct List {
private:
List* next;
public:
int a;
};
Там нет другой разницы между struct
и class
в C++.
Первая ссылка после [googling typedef] (http://en.wikipedia.org/wiki/Typedef) – P0W
Невозможно подсчитать до строки 21, но строка 12 ('StackDataType, position;') предоставляет экземпляры typedef для структуры что неверно синтаксис C++. –
Здесь нет веских причин использовать typedef. Этот код написан очень странно. Это похоже на C-код, частично перенесенный на C++. Я бы не потратил слишком много времени на изучение этого. Хороший код на C++ не похож на этот. – john