//--------- C++
class cl2;
class cl1
{
public:
int q;
void fn2(cl2 &t);
};
class cl2
{
public:
int i;
void fn(cl1 &w);
};
//-- реализация функций только после полного описания интерфейса - т.е. фиксации размеров классов
//-- теперь компилятор знает сколько именно стека нужно резервировать в функциях под классы
void cl1::fn2(cl2 &t){t.i = 87;}
void cl2::fn(cl1 &w){w.q = 9;}
class cl2;
class cl1
{
public :
int q;
void fn2(cl2 *t){t->i = 87 ;}
};
class cl2
{
public :
int i;
void fn(cl1 *w){w->q = 9 ;}
};
Ve bu nasıl çalışır:
class cl2;
class cl1
{
public :
int q;
void fn2(cl2 *t);
class cl2
{
public :
int i;
void fn(cl1 *w);
};
void cl1::fn2(cl2 *t){t->i = 87 ;}
void cl2::fn(cl1 *w){w->q = 9 ;}
class cl2;
class cl1
{
public :
int q;
void fn2(cl2 *t); //{t->i = 87;} // здесь реализация не прокатит: ещё неизвестен размер и состав класса cl2
}; // например, откуда последовательному компилятору знать о члене 'i' ?
class cl2
{
public :
int i;
void fn(cl1 *w){w->q = 9 ;} // размер и состав класса cl1 уже известен на этом этапе. поэтому можно здесь.
};
void cl1::fn2(cl2 *t){t->i = 87 ;}
//void cl2::fn(cl1 *w){w->q = 9;}
Anlaşılması gereken en önemli şey, C++ kurallarının sıralı derleme için tasarlandığıdır.
Evet, bir artı koymanız gerekiyor gibi görünüyor))
"Neden?" sorusunun anlamsızlığının güzel bir örneği. Belki başka sorular vardır? :)
:) Bir fikir var - belki VS'de bir şekilde farklı bir şekilde gereklidir? Yoksa işe yaramaz mı?
:) Bir fikir var - belki VS'de bir şekilde farklı bir şekilde gereklidir?
Evet. * gerekli
Evet. * gerekli
Bu arada, bu da çalışmıyor:
Ve bu nasıl çalışır:
Artı işareti kırıldı :). Teşekkür ederim.
Hayır hayır hayır !! Bir artı bırakın. "MS berbat, MQ kraldır!!"
Bunu da beğenebilirsiniz:
Anlaşılması gereken en önemli şey, C++ kurallarının sıralı derleme için tasarlandığıdır.VS haklı. fn2 işlevinin uygulanması sınıfın dışına taşınırsa ve cl2 tanımından sonra bildirim yeterli olacaktır.
Dan beri işlev doğrudan gövdede tanımlanır, basit bir bildirim çalışmaz (referans yoluyla geçmesine rağmen), çünkü fonksiyon cl2 tanımını gerektirir.
Veya bir hata veya bir özellik. Daha büyük olasılıkla ikincisi, ancak belirtmek daha iyidir.