Erros, bugs, perguntas - página 2328

 
Alexey Navoykov:
Não estás a prestar atenção.

Ou você. Vamos directos ao assunto.

 
A100:

Ofereci a variante mais simples que poderia ser implementada amanhã (não em 10 anos) e que seria semelhante ao C++ (caso contrário, porquê mudar seja o que for). Além disso, se operador*() não é e não será implementado (havia informação sobre isso no fórum), não é claro porque é que operador->() seria implementado de repente (são da mesma ordem).

Não é necessário sob esta forma amanhã ou daqui a 10 anos. E não precisa de similaridade externa, precisa de características.

Para pelo menos parcialmente o porto STL de C++. Não é só o operador-> que está em jogo aqui, precisamos de muito mais.

operator-> seria o primeiro passo em direcção a ponteiros inteligentes.


 

Na verdade, nem tudo está bem com o elenco implícito como está agora.

class A
{};

class B : public A
{};

void OnStart()
{
   A* ab = new B;
   A* aa = new A;
   
   B* bb = ab; // ok
   
   B* ba1 = dynamic_cast<B*>(aa);
   Print(ba1 ? "ba1 ok" : "ba1 bad cast"); // bad cast

   B* ba2 = aa; // здесь неконтролируемый вылет
   Print(ba2 ? "ba2 ok" : "ba2 bad cast");
}

Pode ver que o elenco dinâmico está incluído no elenco implícito

MAS

primeiro, não sabemos porque está incluído quando o elenco dinâmico está explicitamente presente na língua

em segundo lugar, está incluído muito mal porque o erro dinâmico de fundição em caso de função pode ser controlado (má saída do ponteiro) mas a fundição implícita não pode! porque lança uma excepção incontrolável

2018.11.23 20:31:47.348 teste (AUDNZD,M5) fundição incorrecta de apontadores em 'test.mq5' (17,11)

Não tem qualquer efeito.

Tem de dar um ponteiro inválido como função, ou excluir o elenco dinâmico do elenco implícito e dar um erro de compilação.

 

Sim, com este problema, trabalhar com o OOP é mal controlado e pouco fiável. Em algum lugar se muda o tipo num lugar do programa, e depois explode em quem sabe onde. Nestes exemplos, pode-se de alguma forma escapar usando muletas, porque há uma simples atribuição de ponteiro, e tudo está à sua frente. Mas em geral, quando um ponteiro é passado para alguma função e dinamicamente lançado para algo desconhecido, não se tem forma de o controlar.

 
Alexey Navoykov:

Um ponto é um operador universal em MQL.

Isso depende da forma como se olha para ela. Pode dizer-se que é universal: funciona tanto com objectos como com apontadores.

Ou pode dizer que . funciona apenas com objectos, e funciona com apontadores apenas na medida em que o ponteiro é implicitamente lançado ao objecto, ou seja, no caso de

class A {
public:
    void f() {}
} *a;

entrada

    a.f();

é equivalente a não

    a->f();

a

    (*a).f();
 

existe esta estrutura

struct OrdersInfo
{
   int      ticket;
   string   symbol;
   int      type;
   double   volume;
   double   open_price;
   double   stop_loss;
   double   take_profit;
   string   comment;
   int      magic;
};

há uma ordem variável OrdersInfo, quando tento escrevê-la num ficheiro

bool WriteStr(OrdersInfo &order)
{
   int handle = FileOpen(m_file_name, FILE_WRITE | FILE_COMMON | FILE_BIN);
   if(handle != INVALID_HANDLE)
   {
      if(FileWriteStruct(handle, order) == 0) return false;
      
      FileClose(handle);
   }
   
   return true;
}

o compilador dá: 'ordem' - estruturas contendo objectos não são permitidas

Qual poderá ser o problema?


 
Andrii Djola:

existe esta estrutura

há uma ordem variável OrdersInfo, quando tento escrevê-la num ficheiro

o compilador dá: 'ordem' - estruturas contendo objectos não são permitidas

Qual poderá ser o problema?


Aqui

https://www.mql5.com/ru/docs/files/filewritestruct

enumera as restrições.

Документация по MQL5: Файловые операции / FileWriteStruct
Документация по MQL5: Файловые операции / FileWriteStruct
  • www.mql5.com
//|                                          Demo_FileWiteStruct.mq5 | //|                        Copyright 2013, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Структура для хранения данных свечи                              |...
 
Obrigado
 

MT4 sobre tráfego UPU é negativo, o contador de históricos descarregados começou a aumentar ...


 
Quando se vai à página de produto de qualquer autor, não há maneira de dizer quais são os produtos para a plataforma certa (4 ou 5). É possível dividir os produtos desta página por plataforma?