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

 
fxsaber:
kodobaseでティックインジケーターを 作りました。しかし、ソースを添付することができません。「ファイルを添付する」を押すと、銘板は消えますが、ファイルを選択するインターフェイスが表示されないのです。
ポップアップをブロックするアドブロックがインストールされているのでしょうか?
 
Vladislav Andruschenko:
ポップアップをブロックするアドブロックがインストールされているのでしょうか?

何も変えていないんです。以前はすべてうまくいっていた。

チェックアウトの際に、このボタンを押すと

これ以外、何も帰ってこない。

 
Sergei Vladimirov:
はい、ご質問の件、了解しました。もっと適切なシグネチャを持つ関数があるのですが、プロテクトされているため呼び出すことができません。はい、Studioとは動作が異なります。MKLでは、(この場合)より厳密な型制御が行われているのです。それをバグと考えるべきかどうかはわからないが。関数に渡される引数の型を制御すれば、問題はありません。

制御はむしろ選択的であるため、より矛盾が生じますが、これはここから導かれます。

class A {
public:
        void f( int ) const {} /*(1)*/        
        void f( int )       {} /*(2)*/
};
class B : public A {
public:
        void f( int ) const {} /*(3)*/
};
void OnStart()
{
        B b; //не const B
        b.f( 0 ); //(*)

}
ここで(*)集合体において(const B bでないことを考慮すると)A::f/*(2)*/の呼び出しはより多くの場合

しかし、C++は常に、派生クラスが適切なメソッドを持っているだけなら、より適切なメソッドのためにベースクラスを分析することはない。

そしてMQLは、前の例ではより適切なメソッドがないかベースクラスを分析しましたが、この例では分析しません(ここでもC++と同様にB::f/*(3)*/を呼び出します)、これは統一されたアプローチがないことを意味します。

一貫性のない制御の別の例:C++は、次のコードを見つけます。

class A { public:
        void f(  int i ) const {}
        void f( uint i )       {}
};
void OnStart()
{
        A a;
        a.f((int)0 );
}
誤って、MQLが良好であること
 
A100:

制御はむしろ選択的であるため、より矛盾が生じますが、これはここから導かれます。

class A {
public:
        void f( int ) const {} /*(1)*/        
        void f( int )       {} /*(2)*/
};
class B : public A {
public:
        void f( int ) const {} /*(3)*/
};
void OnStart()
{
        B b; //не const B
        b.f( 0 ); //(*)

}
ここで、(*) の集合体では、(const B b でないことを考慮すると) A::f/*(2)*/ の呼び出しがより多くなります。

しかし、C++は常に、派生クラスがちょうど良いメソッドを持っている場合、より適切なメソッドのためにベースクラスを分析することはない。

そしてMQLは、前の例ではより適切なメソッドがないかベースクラスを分析しましたが、この例では分析しません(ここでもC++と同様にB::f/*(3)*/を呼び出します)、これは統一されたアプローチがないことを意味します。

一貫性のない制御の別の例:C++は、次のコードを見つけます。

class A { public:
        void f(  int i ) const {}
        void f( uint i )       {}
};
void OnStart()
{
        A a;
        a.f((int)0 );
}
不良品、MQLは良品
C++のコンパイラは何ですか?
 
coderex:
C++コンパイラは何を使っていますか? 私はgccを使っていますが、何のエラーもなく全てパスしています。
また、gccは最後にどのような関数を呼び出すのでしょうか?
class A { public:
        void f(          int i ) const {} //1
        void f( unsigned int i )       {} //2
};
void OnStart()
{
        A a;
        a.f((int)0 );
}

(1)または(2)。ここで、コンパイラーメッセージを 挿入します

それは本当に厳密なコントロールです。ある方法はシグネチャーの点で、ある方法は一貫性の点で、よりフィットします

 
A100:

これは本当に厳密なコントロールで、ある方法は署名によって、ある方法は不変性によってより適しているのです

まあ、const Aをa;にすれば、(1)が呼ばれるはずなんですけどね。そうでない場合は、コンパイラ次第です。つまり、一意性はありえないのです。そして、なぜそのようなコードを書かなければならないのか、その理由は明らかではありません。
 
fxsaber:
そして、なぜそのようなことを書くのかが不明です。

f -> operator[]に置き換えて、最近の例を参考に、[]を左右両方作るにはどうしたらいいか考えてみてください。味に恒常性を持たせる--それをテンプレートで包むと、似たようなものができあがる。

If make const - without ifを検討する。

曖昧さが許されないのであれば、せめて警告を発するべきである

 
A100:
f -> operator[]に置き換えて、最近の例を参考に、[]を左右両方作るにはどうしたらいいか考えてみてください。味にコンスタンスを加える--それをテンプレートで包むと、似たようなものができあがります。
どの例のことを言っているのでしょうか?ソースではなく、動作するはずの最終的なエントリを教えてください。
 
fxsaber:
どの例のことを言っているのでしょうか?ソースではなく、動作するはずの最終的なエントリを教えてください。

最終的にこのような形になるはずです。

void OnStart()
{
        A<int> a;
        int b  = a[ 0 ];
        a[ 0 ] = a[ 1 ];
        a[ 1 ] = b;
}
 
A100:

最終的にこのような形になるはずです。

void OnStart()
{
        A<int> a;
        int b  = a[ 0 ];
        a[ 0 ] = a[ 1 ];
        a[ 1 ] = b;
}
指標は一定ですか?