2009-05-16 10 views

Respuesta

19

Sí, eso es posible. El siguiente simplemente declara wsx

class wsx; 

Ese tipo de declaración que se llama una declaración hacia adelante, porque es necesario cuando dos clases se refieren el uno al otro:

class A; 
class B { A * a; }; 

class A { B * b; }; 

Uno de ellos tiene que ser hacia adelante declaró entonces.

+1

Una nota al margen: es necesaria no solo en casos de 2 clases referidas El uno al otro. Por ejemplo, las declaraciones de reenvío se pueden usar en lugar de incluir encabezados para minimizar las dependencias. – SomeWittyUsername

0

no estoy seguro de lo que quiere decir. El código que pegaste se ve correcto.

+0

que estaba usando el código como un ejemplo de lo que pensé que vería; Estaba preguntando si era posible. –

+0

Bueno, es posible, y lo hiciste, pero no estoy seguro de que dijeras lo que querías decir, e hiciste lo que querías hacer :) – bdonlan

0

Se definió la clase. No tiene miembros de datos, pero eso no es necesario.

3

En su ejemplo,

class wsx; // this is a class declaration 

class wsx // this is a class definition 
{ 
public: 
wsx(); 
} 

Así que sí, mediante el uso de class wsx; es posible declarar una clase sin definirlo. Una declaración de clase le permite declarar punteros y referencias a esa clase, pero no instancias de la clase. El compilador necesita la definición de clase para saber cuánta memoria asignar para una instancia de la clase.

4

Esta es la definición de la clase

class wsx 
{ 
public: 
wsx(); 
} 

Ésta es la definición del constructor

wsx::wsx() 
{ 
std::cout<<"WSX"; 
} 

Se trata de una declaración adelantada que dice la clase se definirá en algún lugar

class wsx; 
2

Sí. Pero es no posible definir una clase sin declarar.

Porque: Cada definición es también una declaración.

Cuestiones relacionadas