2009-05-16 6 views

ответ

19

Да, это возможно. Следующий раз заявляет wsx

class wsx; 

Такого рода заявления называют опережающее объявление, потому что это необходимо, когда два класса относятся друг к другу:

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

class A { B * b; }; 

Один из них должен быть вперед объявлены тогда.

+1

Замечание: это необходимо не только в случаях, когда 2 класса ссылаются друг друга. Например, можно использовать форвардные объявления вместо включения заголовков для минимизации зависимостей. – SomeWittyUsername

0

Я не уверен, что вы имеете в виду. Код, который вы вставили, выглядит правильно.

+0

Я использовал код в качестве примера того, что, как я думал, будет выглядеть; Я спрашивал, возможно ли это. – 2009-05-16 02:02:40

+0

Ну, это возможно, и вы сделали это, но я не уверен, что вы сказали, что вы хотели сказать, и сделали то, что вы хотели сделать :) – bdonlan

0

Вы определили класс. У него нет данных, но это необязательно.

3

В вашем примере,

class wsx; // this is a class declaration 

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

Так что да, с помощью class wsx; можно объявить класс без его определения. Объявление класса позволяет объявлять указатели и ссылки на этот класс, но не экземпляры класса. Компилятору необходимо определение класса, чтобы он знал, сколько памяти выделяется для экземпляра класса.

4

Это определение класса

class wsx 
{ 
public: 
wsx(); 
} 

Это определение конструктора

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

THis является прямым свидетельством того, что говорит класс будет определен где-то

class wsx; 
2

Да. Но это не можно определить класс, не объявив его.

Потому что: Каждое определение также является декларацией.

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

  • Нет связанных вопросов^_^