エラー、バグ、質問 - ページ 1588

 

と思っているあなた

void f() const

はポインタを変更することはできませんが、ポインタが参照するオブジェクトを変更することはできます。まあ、MQL5にはそんな変更できないポインターはないんですけどね。したがって、const 修飾子は常にポインタが参照するオブジェクトを参照する。

 
Anton Zverev:

では、ここにある定数ポインターはどこにあるのでしょうか!

f()、g()メソッドでは、a ポインタは一定となる。

まあ、MQL5にはそんな変更できないポインターはないんですけどね。したがって,const 修飾子は常にポインタが参照するオブジェクトを参照することになる

このような断定的な結論は、このテーマについて十分な知識がない限り出すべきではありません。 MQLは定数ポインタを持ち、C++と同じ方法で宣言しています。

 
Alexey Navoykov:

十分な知識がないまま、このような断定的な結論を出すべきではありません。 MQLでは定数ポインタが存在し、C++と同じように宣言されます。

MQL5で定数ポインタを宣言する方法!
 

開発者の説明を覚えている限りでは、定数はオブジェクトとポインタの両方に適用されます。

MQLのconst T* === C++のconst T* constと書く。

以前もそうでしたし、今は違うのかもしれませんが、どうなんでしょうね。

 

コンパイルエラー

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 );
}
 

コンパイルエラー

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; }

こうあるべきでした。

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

こうあるべきでした。

一方、これはC++と互換性があったはずだ--そこで「干渉」するのはクラスBだけで、それを取り除けばエラーなくコンパイルできる。チェックすることを目的としているためです。
 

コンパイルエラー

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

コンパイルエラー

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
};