Ошибки, баги, вопросы - страница 1980

 
Stanislav Korotky:

Не хамите. Вы тут сами первыми начали ненормально общаться.

Тем что спросил про компиляцию в С++ ? На мой взгляд обычный рабочий вопрос
 
Andrey Barinov:
Для справки: если оба ваши примера четко перевести на С++, то С++ выдаст ошибку в обоих случаях. MQL в 1-ом случае не выдает ошибку лишь потому что процесс компиляции (а не сам язык) отличается
 
A100:
Тем что спросил про компиляцию в С++ ?

Вот этими двумя пассажами:

А вы пробовали этот пример в С++ компилировать - или это общие теоретические рассуждения?

в ответ на приведенный мной рабочий пример на C++, а также

Если не пробовали - так и напишите

в ответ на то, что я то как раз пробовал.

 
Stanislav Korotky:

Вот этими двумя пассажами:

в ответ на приведенный мной рабочий пример на C++, а также

в ответ на то, что я то как раз пробовал.

Вы когда в CервисДеск пишете - тоже приводите в качестве примера код на стороннем сайте? А если нет - то почему ?
 
A100:
Для справки: если оба ваши примера четко перевести на С++, то С++ выдаст ошибку в обоих случаях. MQL в 1-ом случае не выдает ошибку лишь потому что процесс компиляции (а не сам язык) отличается

Спасибо.

 
Andrey Barinov:

Спасибо.

Чтобы не быть голословным привожу аналог к последнему (немного подправил на свой манер):

#ifdef __cplusplus
class B;
class A {
        int f( B* b ) { return b->i; } //Error: E2315
        int i;
};
class B : public A {};
#endif

и к первоначальному сообщению

#ifdef __cplusplus
class B;
class A {
        void f() {}
        void g() { b->f(); } //Error: E2315
        B *b;
};
class B : public A {};
#endif
 

Я проверил, вариант Станислава успешно компилируется в VS 2010.  Кроме того, работает также и обращение к приватному полю, а не только к методу.   Так что, пожалуй, А100 погорячился в своих выводах на этот раз )

 
Alexey Navoykov:

Я проверил, вариант Станислава успешно компилируется в VS 2010.  Кроме того, работает также и обращение к приватному полю, а не только к методу.   Так что, пожалуй, А100 погорячился в своих выводах на этот раз )

А он точно соответствует https://www.mql5.com/ru/forum/1111/page1999#comment_5677254 ?

Выше мои варианты... выкладывайте код сюда - раз он сам не может выложить

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2017.08.29
  • www.mql5.com
Форум алго-трейдеров MQL5
 
A100:

А он точно соответствует https://www.mql5.com/ru/forum/1111/page1999#comment_5677254 ?

Выше мои варианты... выкладывайте код сюда - раз он сам не может выложить

А каким компилятором вы это компилировали?  У меня в VS 2010 ваш код не компилируется совсем по другой причине:  не определён класс B там, где вызывается метод этого класса.  Для этого нужно вынести определение g() за пределы класса.  И у Станислава именно так и было сделано.   Т.е. ваш код должен быть таким:

class B;
class A {
  void f() {}
  void g();
  B *b;
};
class B : public A {};


void A::g(void)
{
  b->f();
}

и это компилируется.

 
Alexey Navoykov:

А каким компилятором вы это компилировали?

По сути это ничего не меняет - ошибка при компиляции (у меня планшет - компилятор Borland)

#ifdef __cplusplus
class B;
class A {
        void f() {}
        void g();
        B *b;
};
class B : public A {};
void A::g() { b->f(); } //Error: E2247
#endif
Причина обращения: