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

 

テンプレートの改良が必要(クラスAの外に実装を持ち出す{})。

template<typename T>
class A { public:
template<typename T2>
        void f1( T2 t2 );
template<typename T2>
        void f2( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); }
template<typename T2>
        void f3( T2 t2, T tt );
        T t;
};
template<typename T>
template<typename T2>
void A::f1( T2 t2 )       { Print( __FUNCSIG__, " ", typename( this.t ) ); } //нормально
template<typename T>
template<typename T2>
void A::f3( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); } // error: 'T' - declaration without type

A::f3 をクラス A {} の外に実装できない。

しかし、クラスA {}の内部では可能です。はい、できます...のように、例えばf2()のように、クラスA {}の外に面倒な関数を取るという目的に不都合があるのです。主な点は、A::f1()はクラスA {}の内部に取り込むことができ、すべてが動作しますが、A::f3()はできません - コンパイラはエラーを発生させます。

 
いや、それは愚痴だ。ところで、型定義はこの問題を解決するはずだ。
 
A100:

テンプレートの改良が必要(クラスAの外に実装を持ち出す{})。

A::f3 をクラス A {} の外に実装できない。

しかし、クラスA {}の内部では可能です。はい、できます...のように、例えばf2()のように、クラスA {}の外に面倒な関数を取るという目的に不都合があるのです。要は、A::f1()はクラスAの外{}に持っていけばすべて動くのに対して、A::f3()はそうならない、つまりA::f1()とA::f3()は本質的に何も変わらないのでコンパイラはエラーを発生させるのです。

このように正常にコンパイルされます。

template<typename T>
class A { public:
template<typename T2>
        void f1( T2 t2 );
template<typename T2,typename T>
        void f2( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); }
template<typename T2,typename T>
        void f3( T2 t2, T tt );
        T t;
};
template<typename T2>
void A::f1( T2 t2 )       { Print( __FUNCSIG__, " ", typename( this.t ) ); } //?????????
template<typename T2,typename T>
void A::f3( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); } //error: 'T' - declaration without type

また、f1とf3は少し異なります。

 
Andrey Barinov:

このように正常にコンパイルされます。

そうではなく、コンパイラはOnStartが ないものと判断しただけです。

つける

void OnStart()
{
        A<long> a;
}
 

コンパイルエラー: 内部エラー#9

ファイル:
Test114.mq5  3 kb
 

2行ほど変更すると、エラーは次のように変わります:ツリー最適化エラー

しかし、元々(簡略化する前)、エラーは:コード生成エラーでした

そして、すべてはそこで終わりです。しかし、以前はすべてうまくいっていたのです。

ファイル:
Test115.mq5  3 kb
 
A100:

1つのアーカイブでたくさんの種類のスリムソースを作る。そうすれば、開発者が別のバグだらけのビルドをロールアウトする前に、それを使うことができます。

アーカイブを「シラミ検査」と呼ぶ。確かに、コンパイラの種類によって、このようなテストのバリエーションはありますね。

 
コンパイルエラー: コード生成エラー
ファイル:
Test116.mq5  2 kb
 


基準値の計算が正しくないため、最適化チャートが 描画されなくなる。 チャート上で最適化プロセスを観察するのに非常に便利なので、修正をお願いします。

Balance + max RF criteriaの時のみ表示されます。// 少なくとも私の(今のところ小さな)練習では。

// グラフだけが壊れ、最適化が成功する。

----------- 更新

Проявляется только на критерии Balance + max RF.

私は間違っていた。


 

&とGetPointerの 動作の違い

class A {};
class B {
        A *f() const { return GetPointer( a ); } //не генерирует ошибки
        A *g() const { return &a; }              //ошибка: 'return' - cannot convert from const pointer to nonconst pointer
        A a;
};