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

 
Renat Fatkhullin:

build 1711、1709と1700で同じエラーが発生しました、今まで気がつかなかったです。

- 履歴にないバーの開店時間を 要求すると、CopyTimeが不明な時間の間フリーズしてしまいます。

CopyTime(_ticker, _tf, _start, _stop, _buff)
где:
_ticker == RTS-9.12
_tf == PERIOD_M1
_start == D'2017.09.20 19:01'
_stop == D'2017.09.20 19:00'
_buff == динамический массив типа datetime

が、夕方のセッションが19:05に移動し、この時間帯の履歴にバーがないため、関数を呼び出した後、プログラムの制御が戻らず、ハングアップしてしまいます。

しかし、この関数はエラーで終了するはずです。

 

実行時のエラー

typedef void (*fn)();
struct A {
        fn a;
};
struct B : A {
        void a() {}
};
void OnStart()
{
        B b;
        b.a(); //error: invalid function pointer call
}
typedef void (*fn)();
void g() {}
struct A {
        A() : a( g ) {}
        fn a;
};
struct B : A {
        void a() {}
};
void OnStart()
{
        B b;
        b.a(); //вместо B::a() вызывается g()
}
 

コンパイルエラー

typedef void (*fn)();
struct A {
        fn a;
};
struct B : A {
        void a( int ) {}
};
void OnStart()
{
        B b;
        b.a( 2 ); //error: '2' - wrong parameters count
}

 
静的変数のニュアンスが覚えられない。なぜこの野郎がこんなことをするのか、思い知らせてくれるかい?
class A
{
public:
  A()
  {
    A::f();
  }
  
  static void f()
  {
    static bool Tmp = true;
    
    Print(Tmp);
  }
};

void OnStart()
{
  static A a; // static - false, иначе - true;
}
 

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

バグ、バグ、質問

A100, 2017.12.19 23:04

実行時のエラー

typedef void (*fn)();
struct A {
        fn a;
};
struct B : A {
        void a() {}
};
void OnStart()
{
        B b;
        b.a(); //error: invalid function pointer call
}
void g() {}
void OnStart()
{
        B b;
        b.a = g;
        b.a(); //вместо B::a() вызывается g()
}

フィールドとメソッドが同じ名前であるため、フィールドとメソッドの参照先が全く同じになるという、どちらのケースでも理解できる理由のようです。これに対応して、コンパイラはメソッドの代わりにフィールドを呼び出します。最初のケースでは、フィールドが定義されていないので、ガッカリです。2番目のケースでは、すべてがうまくいき、フィールドが呼び出されます。

つまり、ベースではメソッドを宣言し、ディセンダントでは同名のフィールドを宣言すれば、異なる順序で動作することになる。

コンパイラは次のような出力をするはずです。

declaration of 'a' hides member declaration at line 3
 
fxsaber:

したがって、コンパイラはメソッドではなく、フィールドを呼び出します。

フィールドはメソッドより優れているのですか?例えばC++では、フィールドではなくメソッドを呼び出します。これは論理的なことで、メソッドは派生クラスの 中にあるので、より近い場所にあるからです。つまり、派生クラスのシグネチャが完全に適合するのであれば、なぜベースクラスに関与するのでしょうか?

 
A100:

フィールドはメソッドより優れているのですか?例えばC++はフィールドの代わりにメソッドを呼び出しますが、これはメソッドが派生 クラスにあるため、より近いという論理です。つまり、派生クラスでのシグネチャが完全に適合するのであれば、なぜベースクラスに関与するのか?

人為的な状況を作り出していることを自覚し、常にコンパイラからの警告を伴うようにしなければならないのです。

より近くに」というテーマで、私はこう書きました。

fxsaber

base でメソッドを宣言し、descendant で同名のフィールドを宣言した場合、異なる順序で動作します。

 
fxsaber:
静的変数とのニュアンスが覚えられない。なぜこの野郎がこれを発生させるのか、思い知らせてください。

全体の問題は、変数の初期 化の順序とコードの実行の順序です。

言葉で説明するよりも、ステップバイステップのデバッグモードで理解する方が簡単です。

 

フリーランスの仕事で変なバグが発生

4つのジョブが進行中で、私は1をとって5となり、1をパスして5が残った。

もう1つ仕事を受けたら5と表示された もう1つ仕事を受けたら6と表示された もう1つ仕事を受けたら4と表示されたが6ジョブが進行中と表示された

5つの仕掛かり品を抱えて再就職した 7

今は5つしかない仕事を受けられない。

アプリケーション番号

1913868

 
Aleksei Beliakov:

フリーランスの仕事で変なバグが発生

4つのジョブが進行中で、私は1つのジョブを取って5つになり、1つのジョブをパスして5つになりました。

もう1つ仕事を受けたら5と表示された もう1つ仕事を受けたら6と表示された もう1つ仕事を受けたら4と表示されたが6ジョブが進行中と表示された

は5作品だが「進行中」7作品と、もう1つ取った。

今は5つしかない仕事を受けられない。

アプリケーション番号

1913868

メッセージありがとう、修正に取り組んでいます。