Especificadores de tipo elaborated
Um especificador de tipo elaborated é precedido por um nome de tipo de class, struct, enum, ou union palavra-chave.
class identifier
struct identifier
enum identifier
union identifier
Comentários
Um especificador de tipo elaborated é usado para dar ênfase ou para revelar um nome de tipo está oculta pela declaração de uma variável com o mesmo nome no mesmo escopo.
A instrução a seguir declara o Window identificador como um nome de classe.Essa sintaxe é usada para encaminhar declaração de classes.Para obter mais informações sobre nomes de classe, consulte Nomes de classe.
class Window;
Se um nome for declarado usando a união palavra-chave, ele também deve ser definido usando o união palavra-chave.Nomes que são definidos usando o classe palavra-chave pode ser declarada usando o struct palavra-chave (e vice-versa).Portanto, os exemplos de código a seguir são legais:
Exemplo
// elaborated_type_specifiers1.cpp
struct A; // Forward declaration of A.
class A // Define A.
{
public:
int i;
};
int main()
{
}
// elaborated_type_specifiers2.cpp
class A; // Forward declaration of A
struct A
{
private:
int i;
};
int main()
{
}
// elaborated_type_specifiers3.cpp
union A; // Forward declaration of A
union A
{
int i;
char ch[2];
};
int main()
{
}
No entanto, os exemplos a seguir, são ilegais:
// elaborated_type_specifiers4.cpp
union A; // Forward declaration of A.
struct A
{ // C2011
int i;
};
// elaborated_type_specifiers5.cpp
union A; // Forward declaration of A.
class A
{ // C2011
public:
int i;
};
// elaborated_type_specifiers6.cpp
struct A; // Forward declaration of A.
union A
{ // C2011
int i;
char ch[2];
};