Erros, bugs, perguntas - página 1588

[Excluído]  

Acredita que

void f() const

não pode mudar o ponteiro, mas pode mudar o objecto a que o ponteiro se refere. Bem, não existem tais indicadores na MQL5 que não possam ser alterados. Portanto, o modificador constante refere-se sempre aos objectos, aos quais o ponteiro se refere.

 
Anton Zverev:

Então onde acha que está aqui o ponteiro constante!

Nos métodos f() e g(), o ponteiro torna-se constante.

Bem, não existem tais indicadores na MQL5 que não possam ser alterados. Portanto, o modificador constante refere-se sempre aos objectos a que o ponteiro se refere

Não se devem tirar conclusões tão categóricas sem conhecimento suficiente sobre o assunto. A MQL tem indicações constantes e declarou-as da mesma forma que em C++.

[Excluído]  
Alexey Navoykov:

Não se devem tirar conclusões tão categóricas sem conhecimento suficiente do assunto. Existem indicações constantes em MQL e são declaradas da mesma forma que em C++.

Como declarar um ponteiro constante na MQL5!
 

Tanto quanto me lembro da explicação dos criadores, a constância aplica-se tanto ao objecto como ao ponteiro.

Isto é, escrever const T* em MQL === const T* const em C++

Era assim antes, talvez agora seja diferente, mas duvido que assim seja.

 

Erro de compilação

template<typename T>
class A { public:
        bool operator==( const A& ); //error: 'operator' - function must have a body
        T t;
};
class B {
        A<int> a;
};
template<typename T>
bool A::operator==( const A& )  { return false; }
void OnStart()
{
        A<int> a, b;
        Print( a == b );
}
 

Erro de compilação

template<typename T>
class A { public: T t; };
class B { public:
template<typename T> void g(   T  * );
template<typename T> void f( A<T> * );
};
template<typename T> void B::g(   T  * ) {} //нормально
template<typename T> void B::f( A<T> * ) {} //ошибка: 'f' - member function already defined with different parameters
void OnStart()
{
        A<int> a;
        B b;
        b.g( &a );
        b.f( &a );
}
 
A100:

...

template<typename T>
bool A::operator==( const A& )  { return false; }

Deveria ter sido assim:

template<typename T>
bool A<T>::operator==( const A& )  { return false; }
 
Alexey Navoykov:

Deveria ter sido assim:

Isto teria sido compatível com C++, por outro lado - apenas a classe B "interfere" aí - se a remover, compila sem erros. Esta é a razão pela qual se destina a verificar
 

Erro de compilação

template<typename T>
class A {};
class B {
        void A() {}
        void f() { A(); } //error: 'A' - template mismatch
};
 

Erro de compilação

template<typename T> class A {};
template<typename T> class B {};
class C {
template<typename T>
        void f( B<A<T> > * ) {}
        B<A<int> > *b;
public:
        void g() { f( b ); } //error: 'f' - cannot to apply function template
};