Erros, bugs, perguntas - página 1416

 
Quando ocorre o "erro interno do compilador"?  
Ilyas:
Sabemos de dois casos até agora:
1) Em bool &= operação (bool expression)
2) Vírgula desnecessária na inicialização das sequências: val={...},{...}, }.

Estes bugs ainda não foram corrigidos na nova construção? O meu compilador ainda gera um erro, tenho de me cingir à construção 1159.

 
Renat Fatkhullin:
O requisito para os modelos é colocar todos os métodos dentro da descrição da classe sem colocar corpos no exterior.

Estou a ver, o principal é manter este requisito, porque apenas foram criados contentores de pilha e fila de espera e um mês depois apareceram os modelos de classe, e tudo deveria funcionar melhor com eles :)

Outra questão é sobre os modelos de classes. Existem duas classes de modelos, uma classe utiliza outra, será que um tipo será transferido de uma classe de modelo para outra ou não?

 
coderex:

Estou a ver, o principal é manter este requisito, porque apenas foram criados contentores de pilha e fila de espera e um mês depois apareceram os modelos de classe, e tudo deveria funcionar melhor com eles :)

Outra questão é sobre os modelos de classes. Existem duas classes modelo, uma das classes utiliza outra, haverá uma transferência de tipo de uma classe modelo para outra ou não?

Experimente-o.
 
Renat Fatkhullin:
Experimente-o.
Tento e recebo alguns erros, penso noutra forma de o fazer...
 

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

Alexey Navoykov:
O meu compilador ainda me está a dar um erro, tenho de ficar na construção 1159.

Verificou-o apenas em caso de vírgula extra na p.2 no MT4 890 - apenas dá uma mensagem de erro.
 

Alguém já fez uma classificação CList?

Basicamente, precisamos de anular a Comparação.

Mas o tempo todo eu chamo Comparação da classe base. Mas não funciona, pergunto-me o que estará errado aqui...

Fez um exemplo simples:

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;
  }
Arquivos anexados:
sort.mq5  3 kb
 

Ao processar modelos aninhados (MQL4), vejo falhas com a passagem do tipo - alguém reparou nisso?

Em particular, existe uma classe A com um método de modelo, dentro da qual um objecto de outra classe B é criado por um construtor de modelo usando o mesmo tipo T com o qual o método foi inicializado. Como resultado, dentro desse método o nome datilógrafo define correctamente o tipo passado, por exemplo, como int, mas dentro do construtor B o nome datilógrafo já é string.

SD?

 
A forma mais ortodoxa de ordenar a folha é sobrecarregá-la numa matriz, ordenar a matriz e voltar a sobrecarregá-la.
 

Utilizo a classificação a toda a hora - sem qualquer problema.

Você,sigma7i, tem o método incorrectamente substituído Coperation::Compare(), retorna o tipo errado de valor, que o método base CObject::Compare() retorna, e o compilador toma-o como separado, não virtual. Como resultado, apenas o método base é chamado nos seus objectos, o compilador acredita que não há descendente...

 
sigma7i:

Mas o tempo todo chama Comparação da classe base. Mas não funciona, por isso acho que há algo de errado...

virtual int Compare(const CObject *node,const int mode=0) const;