Çaydanlıktan gelen sorular - sayfa 139

 
220Volt :
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? :)
 
MetaDriver :
"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ı?
 
220Volt :
:) Bir fikir var - belki VS'de bir şekilde farklı bir şekilde gereklidir? Yoksa işe yaramaz mı?
Bu doğru soru. Ve yararlı. Artık uzmanlar size anlamlı bir cevap verebilir.. :)
 
220Volt :
:) Bir fikir var - belki VS'de bir şekilde farklı bir şekilde gereklidir?
Evet. * gerekli
 
//--------- 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;}

 
sergeev :
Evet. * gerekli
peki, herkes yapabilir... referans değişkenlerinin çalışmasını sağlayabilirsiniz... :) :)
 
MetaDriver :

Artı işareti kırıldı :). Teşekkür ederim.
 
sergeev :
Evet. * gerekli

Bu arada, bu da çalışmıyor:

 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 ;}

220Volt :
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:

 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.
 
220Volt : hatasız derler, VS'de istemez (bir sınıfı tanımsız kullanamayacağınızı söyleyin). Niye ya?

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.