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

 
A100:

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

Хм, значит надо лезть в стандарты языка и смотреть, чей компилятор косячит.
 
Alexey Navoykov:
Хм, значит надо лезть в стандарты языка и смотреть, чей компилятор косячит.
Второй вариант аналогичен

#ifdef __BORLANDC__
class B;
class A {
        int g( B * );
        int i;
};
class B : public A {};
int A::g( B *b ) { return b->i; } //Error: E224
#endif

Косячит VS 2010 потому что преодолевает private путем неявного преобразования от B* к A*


#ifdef __BORLANDC__

class B;
class A {
        int g( B * );
        int i;
};
class B : public A {};
int A::g( B *b ) { return ((A *)b)->i; } //нормально

#endif

 
Alexey Navoykov:
Хм, значит надо лезть в стандарты языка и смотреть, чей компилятор косячит.
gcc 7.2 компилит последний вариант, проверял тут
Compiler Explorer - C++
  • About the author
  • godbolt.org
These settings control how Compiler Explorer acts for you. They are not preserved as part of shared URLs, and are persisted locally using browser local storage.
 
Комбинатор:
gcc 7.2 компилит последний вариант, проверял тут

В итоге получается следующая таблица

class B;
class A {                                       //MQL //BCC //VS2010 //gcc
        int f1( B *b ) { return       b .i;   } // -     -     +        +
        int f2( B *b ) { return       b .g(); } // +     -     +        +
        int f3( B *b ) { return ((A *)b).i;   } // +     +     +        +
        int f4( B *b ) { return ((A *)b).g(); } // +     +     +        +
        int f5()       { return       b .i;   } // -     -     +        +
        int f6()       { return       b .g(); } // +     -     +        +
        int f7()       { return ((A *)b).i;   } // +     +     +        +
        int f8()       { return ((A *)b).g(); } // +     +     +        +
//---
        int g() { return 0; }
        int i;
        B *b;
};
class B : public A {};

И при этом msdn пишет: Управление доступом помогает предотвратить использование объектов в неправомерных целях. Такая защита теряется при выполнении явных преобразований типов (приведении типов).
 

Всем привет.

Подскажите можно ли как нибудь убрать с графика окно индикатора появляющееся при включении визуализации в тестере стратегий?

Cгенерирован при помощи wizarda в MT5.

В документации MQL5 вычитал, что IndicatoRelease не работает в тестере. (Все равно пробовал вставить эту функцию в OnDeinit начинает ругаться, что хэндл не объявлен. Объявляю его, выдает другие ошибки.)

Есть ли другой вариант?

 
Ahmet Garyagdyyev:

Всем привет.

Подскажите можно ли как нибудь убрать с графика окно индикатора появляющееся при включении визуализации в тестере стратегий?

Cгенерирован при помощи wizarda в MT5.

В документации MQL5 вычитал, что IndicatoRelease не работает в тестере. (Все равно пробовал вставить эту функцию в OnDeinit начинает ругаться, что хэндл не объявлен. Объявляю его, выдает другие ошибки.)

Есть ли другой вариант?


Можно сменить шаблон со всеми индикаторами, на любой из предварительно сохраненных Вами.

 
A100:

В итоге получается следующая таблица

VS и gcc давно считаются эталонными* (или по крайней мере в значительной степени менее подверженными косякам), чем Borland. Я сам пользовался Borland-ом много лет, но исходя из других его преимуществ.

PS. * - это не мое личное мнение; обсуждать его не буду.

 

Коллеги, кто-нибудь встречал попытки реализовать STL с++ библиотеку (делая поправку на языковые возможности)? Предпочтительно с размещением в кодобазе, поиск говорит, что нет, но врдуг ... . Конечно же не всю, но какие-то базовые вещи: несколько нормальных контейнеров через шаблоны, да тот же auto_ptr (я конечно свой написал, но самонаписание таких примитивов - глупость).
Нафига стд мкл нешаблонная и зачем было выдумывать новые имена для методов/классов аналогов в STL не пойму.

 

Нашёл ошибку, я не буду вставлять компилируемый текст полностью, выдерну кусками из скрипта:

class Source : public CObject
{
public:
   upindex_t start, top, lstart, ltop;
};

CArrayObj sourcear;

do
{
   Source *new_src = new Source;
   new_src.start = last.start;
   new_src.top = last.top;
   new_src.lstart = prev_prev.start;
   new_src.ltop = prev_prev.top;
   if( ! sourcear.Add(new_src) )
      return;
}
while(...);

for(int i = 0;  i < sourcear.Total();  ++ i)
{
   Source cursrc = (Source*)sourcear.At(i);  //!!!!! Это не вызывает ошибки во время компиляции
}

Т.е. катстуем: CObject*  --> Source*  -->  Source

Или это какой-то хитрый  MQL Specific?


ЗЫ: и такую строку съедает:

Source new_src = new Source;

Ерунда какая-то. Копирующих конс-ов/операторов в языке нет, я не разыменовывал. Что здесь происходит?

 
pavlick_:

Или это какой-то хитрый  MQL Specific?

class A {};

void OnStart()
{
  A a = new A;
}

Срабатывает оператор копирования по-умолчанию.

Причина обращения: