Vladimir Simakov: Pareço ter apagado meu próprio posto.
Este era o caso quando um objeto é criado em uma função através de uma nova função. Originalmente, falávamos em passar um ponteiro para um objeto existente. E aqui, pode ser passado desta maneira:
E se um ponteiro precisa ser passado para uma função para criar um objeto na função, é assim que ela funciona:
class CObj{
public:
int f(){
return(33);
}
};
CObj * obj;
voidOnStart(){
z(obj);
delete(obj);
}
void z(CObj & o){
o = new CObj();
}
Isso é tudo o que você queria saber sobre o OOP, mas estava com medo de perguntar))))
Este código me dá o pontapé de saída para o terminal. Na melhor das hipóteses, ele causa um erro crítico na depuração (para animação clique na imagem):
Estranho que tal construção seja ignorada pelo compilador.
Rapazes, parem de brigar entre vocês, especialmente em igualdade de condições. Dmitry deu o primeiro exemplo com um erro, e o que há de errado com isso? Dim, sim, ele compila sem erros, mas quando você executa o script, um erro aparece.
Vladimir corrigiu-o e acrescentou um ponteiro, o código funcionou corretamente. O que mais precisamos? Agora temos que descobrir quem é o mais legal? )))) Rapazes, sejam respeitosos uns com os outros e não recorram a personalidades e insultos com arrogância.
Exemplo inicial de Dimitri
class CObj{
public:
int f(){
return(33);
}
};
CObj * obj;
voidOnStart(){
z(obj);
delete(obj);
}
void z(CObj & o){ //тут пропущен указатель
o = new CObj();
}
Correção por Vladimir.
void z(CObj* &o){ //добавлен указатель
o = new CObj();
}
Minha correção com uma impressão do resultado do método, para verificar Este exemplo agora está funcionando, o que mais você precisa? Pare de tentar descobrir quem é mais frio ou não, todo mundo tem erros de digitação e erros.
class CObj
{
public:
int f(){return(33);}
};
void z(CObj* &o)
{
o = new CObj();
Print(o.f());
}
CObj * obj;
//+------------------------------------------------------------------+voidOnStart()
{
z(obj);
delete(obj);
}
No decorrer destes argumentos, acho que identificamos um erro de compilação. Por que o compilador pula a compilação do exemplo inicial de Dmitri sem erros?
Este código me dá o pontapé de saída para o terminal. Na melhor das hipóteses, ele causa um erro crítico na depuração (para animação clique na imagem):
Estranho que tal construção seja ignorada pelo compilador.
A mina compila, funciona corretamente, mas mostra uma mensagem de vazamento de memória (apagar não funciona) após a conclusão.
Desculpas pela desinformação, escrevi anteriormente que não se pode chamar o método Create() em uma classe infantil.
Agora, duplamente verificado, você pode. Mas o acesso ao membro privado m_button não estava disponível. Ou seja, era impossível verificar, por exemplo, o estado do botão: pressionado/liberado.
Agora, com a dica de Igor, é possível.
#define privateprotected#include <Controls\Button.mqh>
class CMyButton : public CButton
{
public:
CMyButton(void){};
~CMyButton(void){};
bool isPrevState; // состояние кнопки на предыд.тике, true - была нажата void setButton(); // создаем кнопку
};
void CMyButton::setButton(void)
{
// метод Create() вызывается
Create(0, "setBtn", 0, 50, 300, 150, 325);
Text("setBtn");
m_button.State(); // работает когда включаем #define private protected
}
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
também está sob a custódia dos moderadores
Quem disse alguma coisa sobre custódia... mas um personagem com duas excentricidades...
também sob a tutela dos moderadores
Pareço ter apagado meu próprio posto.
Este era o caso quando um objeto é criado em uma função através de uma nova função. Originalmente, falávamos em passar um ponteiro para um objeto existente. E aqui, pode ser passado desta maneira:
nulo f(CObj * obj){}
E se um ponteiro precisa ser passado para uma função para criar um objeto na função, é assim que ela funciona:
Isso é tudo o que você queria saber sobre o OOP, mas estava com medo de perguntar))))Este código me dá o pontapé de saída para o terminal. Na melhor das hipóteses, ele causa um erro crítico na depuração (para animação clique na imagem):
Estranho que tal construção seja ignorada pelo compilador.
Dmitry deu o primeiro exemplo com um erro, e o que há de errado com isso?
Dim, sim, ele compila sem erros, mas quando você executa o script, um erro aparece.
Vladimir corrigiu-o e acrescentou um ponteiro, o código funcionou corretamente.
O que mais precisamos? Agora temos que descobrir quem é o mais legal? ))))
Rapazes, sejam respeitosos uns com os outros e não recorram a personalidades e insultos com arrogância.
Exemplo inicial de Dimitri
Correção por Vladimir.
Minha correção com uma impressão do resultado do método, para verificar
Este exemplo agora está funcionando, o que mais você precisa?
Pare de tentar descobrir quem é mais frio ou não, todo mundo tem erros de digitação e erros.
No decorrer destes argumentos, acho que identificamos um erro de compilação.
Por que o compilador pula a compilação do exemplo inicial de Dmitri sem erros?
Este código me dá o pontapé de saída para o terminal. Na melhor das hipóteses, causa um erro crítico de depuração:
É estranho que uma tal construção seja passada pelo compilador.
Tudo é válido para o compilador aqui.
Um ponteiro para um objeto no segmento de dados do programa é criado e é 0x0 iniciado durante a compilação.
Os comandos necessários para o processador são criados no segmento de código.
Em tempo de execução, os comandos são levantados na pilha no endereço da função z(...).
E lá move rdx [0x0]
E o acesso a um endereço de memória nulo é proibido. O desreferenciamento de um ponteiro nulo é chamado
Tudo é válido para o compilador aqui.
Para qual compilador?
Este código me dá o pontapé de saída para o terminal. Na melhor das hipóteses, ele causa um erro crítico na depuração (para animação clique na imagem):
Estranho que tal construção seja ignorada pelo compilador.
A mina compila, funciona corretamente, mas mostra uma mensagem de vazamento de memória (apagar não funciona) após a conclusão.
Você vai lhe ensinar o que é ruim agora, é o que é bom que precisa ser tratado ))))
Você não se sentou com os códigos do fxsaber por nada. Parece-me uma obra-prima.
Desculpas pela desinformação, escrevi anteriormente que não se pode chamar o método Create() em uma classe infantil.
Agora, duplamente verificado, você pode. Mas o acesso ao membro privado m_button não estava disponível. Ou seja, era impossível verificar, por exemplo, o estado do botão: pressionado/liberado.
Agora, com a dica de Igor, é possível.