Erros, bugs, perguntas - página 1736

 
coderex:

se alguém estiver interessado, a resposta do servicedesk:

На данный момент оператор *(dereference/indirection) можно использовать только для указателей на объекты классов и это rvalue

Estou muito interessado! Por favor, explique a resposta do Service Desk com um exemplo.

& == GetPointer(). * - nada mudou.

 
fxsaber:

Estou muito interessado! Por favor, explique a resposta do Service Desk com um exemplo.

& == GetPointer(). * - nada mudou.

De que exemplo precisa?
 
coderex:

se alguém estiver interessado, a resposta é servicedesk:

На данный момент оператор *(dereference/indirection) можно использовать только для указателей на объекты классов и это rvalue
Enviei-lhes uma sugestão no outro dia sobre a introdução de apontadores para qualquer tipo de dados. E esta restrição ridícula é irritante.
 
Alexey Navoykov:
A propósito, enviei-lhes uma proposta no outro dia sobre a introdução de indicações para qualquer tipo de dados. E esta restrição ridícula já é irritante.
Seria bom introduzir a sobrecarga de * operador, porque sem ela não podemos realizar a identidade com STL, também seria bom introduzir o typedef na íntegra, não só em calback`i
 
coderex:
seria bom introduzir a sobrecarga de * operador, porque sem ela não podemos realizar a identidade com STL, também seria bom introduzir o typedef na íntegra, não só em calback`i
Sim, concordo. Tudo está em algum estado inacabado. E em termos de sobrecargas estou mais interessado no operador fantasma, é difícil passar sem ele.
 
coderex:
Que tipo de exemplo deseja?
O que se pretende de * e &. Algo simples mas ilustrativo. Para que se possa ver a conveniência.
 
fxsaber:
O que se pretende de * e &. Algo simples mas ilustrativo. Para ver a conveniência.

O que eu quero, já escrevi acima.

Pode fazer você mesmo um exemplo com o operador '&' onde usa GetPointer(...), é essencialmente uma forma curta

O exemplo com o operador '*' - não sei se o ajuda a compreender:

class Iterator
  {
   int m_value;
public:
   Iterator(const int val) : m_value(val) { }
   int operator*() { return m_value; }
  };

int main(int argc, char **argv) {
   Iterator *_it = new Iterator(5);
  
   int _val = **_it;
//---
   return 0;
}


funciona em C++, mas em MQL terá de fazer um geter para obter m_value.

 

Adicionar à Ajuda que ChartRedraw(MainChartID) não é adequado para redesenhar OBJ_CHART. O ChartRedraw(ObjChartID) é necessário.

Por conseguinte, o exemplo na Ajuda é incorrecto.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Não limitar a escala a N <= 5 (tamanho da área sob barra = 2^N).

Isto é necessário (e tornou-se expediente) para se poder olhar para a história da carraça com mais detalhe.

 
Por favor, esclareça. Roteiro
class A
{
public:
  const int a;
  
  A( int c = 0 ) : a(c) {}
  
  virtual int f()
  {
    Print(__FUNCTION__);
    
    return(this.a);
  }
};

class B : public A
{
public:
  const int b;
  
  B( int c = 0 ) : A(c), b(this.f()){}

  virtual int f()
  {
    Print(__FUNCTION__);
    
    return(this.a);
  }
};


void OnStart()
{
  B b;  
  A* a = new B;
  
  delete a;
}

Resultado

2016.10.18 09:35:01.981 Test14 (GBPUSD,M1)      B::f
2016.10.18 09:35:01.981 Test14 (GBPUSD,M1)      B::f

Qual é a razão para a saída de B::F e não de A::f? O guião é escrito de tal forma que f é chamado ANTES que o corpo do construtor seja executado (em negrito). Mas neste momento, o construtor da classe A já foi chamado. É por isso que este.f() parece referir-se exactamente à classe base antes de o construtor B ser chamado. Explique onde se encontra o erro de raciocínio/previsão.

Razão: