찻주전자의 질문 - 페이지 139

 
220Volt :
예, 플러스를 넣어야 할 것 같습니다))
"왜?"라는 질문의 무의미함을 잘 보여줍니다. 아마도 다른 질문이 있습니까? :)
 
MetaDriver :
"왜?"라는 질문의 무의미함을 잘 보여줍니다. 아마도 다른 질문이 있습니까? :)
:) 아이디어가 있습니다 - VS에서는 어떻게 든 다르게 필요합니까? 아니면 쓸모없나요?
 
220Volt :
:) 아이디어가 있습니다 - VS에서는 어떻게 든 다르게 필요합니까? 아니면 쓸모없나요?
이것은 올바른 질문입니다. 그리고 유용합니다. 이제 전문가들이 의미있는 답변을 드릴 수 있습니다.. :)
 
220Volt :
:) 아이디어가 있습니다 - VS에서는 어떻게 든 다르게 필요합니까?
네. * 필요한
 
//--------- 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 :
네. * 필요한
글쎄, 모든 사람이 할 수 있습니다 ... 참조 변수가 작동하도록 만들 수 있습니다 ... :) :)
 
MetaDriver :

음, 더하기 기호가 깨졌습니다 :). 고맙습니다.
 
sergeev :
네. * 필요한

그건 그렇고, 이것도 작동하지 않습니다.

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

작동 방식은 다음과 같습니다.

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

220볼트 :
음, 더하기 기호가 깨졌습니다 :). 고맙습니다.

아니, 아니 !! 플러스를 남겨주세요. "MS는 미쳤어, MQ는 왕이다!!"

 

다음을 좋아할 수도 있습니다.

 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;}
이해해야 할 주요 사항은 C++ 규칙이 순차 컴파일을 위해 설계되었다는 것입니다.
 
220Volt : MQL에서는 오류 없이 컴파일되지만 VS에서는 원하지 않습니다(정의 없이 클래스를 사용할 수 없다고 말함). 왜요?

VS 맞습니다. fn2 함수의 구현이 클래스 외부로 이동하고 cl2 정의 이후에 선언이면 충분합니다.

이후 함수는 본문에 직접 정의되어 있으므로 참조로 전달하더라도 간단한 선언은 작동하지 않습니다. 함수에는 cl2의 정의가 필요합니다.

또는 버그, 또는 기능. 두 번째 가능성이 높지만 지정하는 것이 좋습니다.