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

 
実行時のエラー
class A {};
class B : public A {
public:
template<typename T>
                void f( T )  { printf( "%d", 1 ); }
};
class C : public B {
public:
                void f( A* ) { printf( "%d", 2 ); }
};
void OnStart()
{
        C *c;
        B *b;
        c.f( b );
}

MQLでの結果です。1

C++の場合:2

私の記憶では、オリジナルのMQLのコンセプトはずっと前に変更され、現在はC++のように、派生クラスに適切な関数がない場合にのみベースクラスが呼ばれるようになっています。それとも、また変えてしまったのでしょうか?

 
A100:

MQLでは問題ないです。

が、C++はどちらの場合もエラーを出します。

2つ目のケースでエラーとなる可能性があるのは?せいぜいポインタが宣言されたが使用されていないという警告(ヒント)が出る程度です。

 
すべての新バージョンで確認されたバグを解決してください

2020.07.26 10:54:28.285 PKFDC0:30019 遺伝子パス (94, 1154) 0:00:00.110 でエラー "OnInit returned non-zero code 1" でテストされました。

2020.07.26 10:54:28.289 Tester エキスパートファイル ...\MQL5StochasticCCI.ex5 open error [2].

ない、あってはならないものです。

エラーはアップグレード後のネットワークエージェントです。アップグレード前は正常に動作していました。古いバージョンでは、オプティマイザはExpert Advisorでエラーを出しません。

メタトレーダーを全解体して再インストールし、全データを削除しても効果がなかった。



 
Boris Egorov:
すべての新バージョンで確認されたバグを解決してください

2020.07.26 10:54:28.285 PKFDC0:30019 遺伝子パス (94, 1154) 0:00:00.110 でエラー "OnInit returned non-zero code 1" でテストされました。

2020.07.26 10:54:28.289 Tester エキスパートファイル ...\MQL5StochasticCCI.ex5 open error [2].

ない、あってはならないものです。

エラーはアップグレード後のネットワークエージェントです。アップグレード前は正常に動作していました。古いバージョンでは、オプティマイザはExpert Advisorでエラーを出しません。

メタトレーダーを全解体して再インストールし、全データを削除しても効果がなかった。



インジケータ呼び出しの コードを表示してください。
 
Mihail Matkovskij:

2つ目のケースでは、何がエラーになるのでしょうか?せいぜいポインタが宣言されたが使用されていないという警告(ヒント)が出る程度です。

それは、それが

class B : public A {};
方言が違う場合もあるので、いずれにせよ開発者に確認する価値はある
 
MetaQuotes:
インジケータ呼び出しの コードを表示してください。

投稿に注意!人のアドバイザーが動かなくなった!!!!!!!!!! https://www.mql5.com/ru/forum/347385/page5#comment_17519416

Новая версия платформы MetaTrader 5 build 2560: Улучшения во встроенной системе обучения
Новая версия платформы MetaTrader 5 build 2560: Улучшения во встроенной системе обучения
  • 2020.07.26
  • www.mql5.com
В пятницу 24 июля 2020 года будет выпущена обновленная версия платформы MetaTrader 5...
 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

A100, 2020.07.26 01:02

MQLで1つだけエラーが発生しています。

class A {};
class B : A {};
class C : B {
                void f1( A* ) {}    //(1)нормально
                void f2() { A *a; } //(2)нормально
};

が、C++はどちらの場合もエラーになる


なぜこのコードに問題があるのか、説明してください。

 
fxsaber:

なぜこのコードに問題があるのか、説明してください。

全然わかんない!この 例を分解してみると...。構造体をクラスに変更 -C++シェルは エラーを発生します。

error: 'class A A::A' is inaccessible

自分で確認することができます。

 

コンテキスト解決。コンストラクタは、プライベート継承のため、祖先からアクセスできない。

コンテキストを明示的に指定すると、すべてがコンパイルされます。

                void f1( ::A* ) {}    //(1)нормально
                void f2() { ::A *a; } //(2)нормально

_____

なぜコンストラクタが必要なのかは聞かないでください。

 
A100 さん、@TheXpert さん、ありがとうございます。