//--------- 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;} // здесь реализация не прокатит: ещё неизвестен размер и состав класса 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;}
Главное усвоить суть - правила С++ расчитаны на последовательную компиляцию.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Да, видимо надо поставить плюсик ))
Хорошая илюстрация бессмысленности вопроса "почему?". Может другие вопросы есть? :)
:) Есть мысль - может в VS надо как-то по-другому? Или бесполезно?
:) Есть мысль - может в VS надо как-то по-другому?
да. * надо
да. * надо
Кстати, так тоже не работает:
А вот так работает:
Ну вот, плюсик сорвался :). Спасибо.
Не не не !! Плюсик оставляем. "MS отстой, MQ - короли !!"
Можно ещё вот так:
Главное усвоить суть - правила С++ расчитаны на последовательную компиляцию.VS ессно права. Объявления будет достаточно, если вынести реализацию функции fn2 за пределы класса и после определения cl2.
А т.к. функция определена прямо в теле, простое объявление не канает (хоть и передача по ссылке), т.к. для работы функции требуется определение cl2.
Или бага, или фича. Скорее второе, но лучше уточнить.