Все вышеприведенные ответы технически отвечают на вопрос автора, но я просто подумал, что укажу случай, когда у вас могут возникнуть проблемы.
Если вы объявите свою структуру следующим образом:
typedef struct{
int x;
foo(){};
} foo;
У вас будут проблемы при попытке объявить конструктор. Это, конечно, потому что вы на самом деле не объявили структуру с именем "foo", вы создали анонимную структуру и присвоили ей псевдоним "foo". Это также означает, что вы не сможете использовать «foo» с оператором определения объема в файле cpp:
foo.h:
typedef struct{
int x;
void myFunc(int y);
} foo;
foo.cpp:
//<-- This will not work because the struct "foo" was never declared.
void foo::myFunc(int y)
{
//do something...
}
Чтобы это исправить, вы должны либо сделать это:
struct foo{
int x;
foo(){};
};
или это:
typedef struct foo{
int x;
foo(){};
} foo;
Где последний создает структуру с именем "foo" и присваивает ей псевдоним "foo", поэтому вам не нужно использовать ключевое слово struct
при ссылке на него.