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

 
В каких случаях возникает "Internal compiler error"?  
Ilyas:
На сегодня известно о двух случаях:
1) в операции bool &= (bool expression)
2) Лишняя запятая в инициализирующих последовательностях: val={ {...},{...}, }

В новом билде так и не исправлены эти баги что ли?  У меня по-прежнему ошибку компилятор выдаёт.  Приходится оставаться на 1159 билде. 

 
Renat Fatkhullin:
Для шаблонов требование размещения всех методов внутри описания класса без выноса тел наружу.

Понятно, главное что бы это требование осталось и дальше, а то только создал контейнеры стека и очереди и через месяц появились шаблоны классов, а с ними то должно лучше все получиться :)

По шаблонам классов еще вопрос. Есть два шаблонных класса, один из классов использует другой, будет ли происходить передача типа из одного шаблонного класса в другой или нет?

 
coderex:

Понятно, главное что бы это требование осталось и дальше, а то только создал контейнеры стека и очереди и через месяц появились шаблоны классов, а с ними то должно лучше все получиться :)

По шаблонам классов еще вопрос. Есть два шаблонных класса, один из классов использует другой, будет ли происходить передача типа из одного шаблонного класса в другой или нет?

Попробуйте.
 
Renat Fatkhullin:
Попробуйте.
я пробую и получаю несколько ошибок, продумываю другой вариант как это сделать...
 

Ilyas:
На сегодня известно о двух случаях:
1) в операции bool &= (bool expression)
2) Лишняя запятая в инициализирующих последовательностях: val={ {...},{...}, }

Alexey Navoykov:
В новом билде так и не исправлены эти баги что ли?  У меня по-прежнему ошибку компилятор выдаёт.  Приходится оставаться на 1159 билде. 

Проверил на всякий случай  с лишней запятой в п.2 в МТ4 890  - просто выдает сообщение об ошибке.
 

Кто нибудь делал сортировку CList?

По сути нужно переопределить Compare.

Но все время вызывается Compare базового класса. Но никак не выходит, закрадывается мысль что то тут не так...

Сделал простой пример: 

 

class COperation : public CObject
  {
public:
   double           number;
   COperation(double p) { number = p;}

virtual int Compare(const CObject *node,const int mode=0);
  };
  
 int COperation::Compare(const CObject *node,const int mode=0)
  {
   const COperation *ppp = node;
   
   if(this.number > ppp.number)
     {
      return 1;
     }
   if(this.number < ppp.number)
     {
       return -1;
     }
   
  return 0;
 }   


void OnStart()
  {
   CList *list = new CList();
   list.Add(new COperation(3));
   list.Add(new COperation(4));
   list.Add(new COperation(7));
   list.Add(new COperation(2));
   list.Add(new COperation(3));
   list.Add(new COperation(9));
   list.Add(new COperation(0));
   list.Add(new COperation(1));
   
   Print("After Sort");
   COperation *node = list.GetFirstNode();
   string numbers = "";
   for(;node != NULL; node = node.Next())
     {
      numbers += (string)node.number + " ";
     }
    Print(numbers); 
    numbers = "";
     
   list.Sort(0);
   
   Print("Before Sort");
   node = list.GetFirstNode();
   for(;node != NULL; node = node.Next())
     {
      numbers += (string)node.number + " ";
     }
   Print(numbers); 
   
   
   delete list;
  }
Файлы:
sort.mq5  3 kb
 

При обработке вложенных шаблонов (MQL4) наблюдаю глюки с передачей типа - такое кто-нибудь замечал?

В частности есть класс A с шаблонным методом, внутри которого создается объект другого класса B шаблонизированным конструктором по тому же типу T, которым инициализировался метод. В результате, внутри этого метода typename правильно определяет переданный тип, например, как int, а уже внутри конструктора B typename равен string.

СД? 

 
Самый православный способ сортировки листа -- перегнать его в массив, массив отсортировать и перегнать обратно.
 

Я постоянно пользуюсь сортировкой - никаких проблем не возникает.

У вас, sigma7i, насколько я понимаю, неверно переопределен метод Coperation::Compare(), он возвращает не тот тип значения, что возвращает базовый метод CObject::Compare(), и компилятор принимает его, как отдельный, а не виртуальный. В результате в ваших объектах вызывается только базовый метод, наследника-то, по мнению компилятора нет...

 
sigma7i:

Но все время вызывается Compare базового класса. Но никак не выходит, закрадывается мысль что то тут не так...

virtual int Compare(const CObject *node,const int mode=0) const;
Причина обращения: