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

 
Stanislav Korotky:

関数内でクラスを宣言する?

テンプレートがないと、うまくいかない。

 
MT5(build 2375)で、関数へのポインタの配列を使用した場合、そのポインタを介して関数を呼び出すとコンパイルエラーに なる不具合を修正しました。

#define  PRINT(x) ; Print(#x, ":", string(x))

void test(){
   PRINT(__FUNCSIG__);
}

template<typename T>
void call(T f_ptr){
   f_ptr();
}


template<typename T>
class A{
public:
   T arr_1[1];
   
   typedef void (*ff)();
   ff arr_2[1];  
   
   
   T test_1(){
      return arr_1[0];
   } 
   
   ff test_2(){
      return arr_2[0];
   } 
   
   T operator[](int index){
      return arr_1[index];
   }
};

void OnStart(){
   typedef void (*ff)();
   ff arr[1];
   arr[0] = test;   
   
   ff f_ptr = arr[0];
   f_ptr();             //Ok
   call(arr[0]);        //Ok
   arr[0]();            //Compile Error: ')' - expression expected   
   
   
   A<ff> a;             
   a.arr_1[0] = test;
   a.arr_2[0] = test;
   
   
   a.arr_1[0]();        //Compile Error: ')' - expression expected   
   a.arr_2[0]();        //Compile Error: ')' - expression expected   
   
   a.test_1()();        //Compile Error: ')' - expression expected   
   a.test_2()();        //Compile Error: ')' - expression expected   
   
   a[0]();              //Ok ???
}


 
Sergey Dzyublik:
MT5(build 2375)で、関数へのポインタの配列を使用した場合、そのポインタを介して関数を呼び出すとコンパイルエラーに なる。

非常に古いバグです。

 

何かアドバイスがあれば - MetaEditorのオープンファイルのウィンドウで、後でそれらを開くためにそれらのリストが保存されている場所?

時々、MEはゼロから開きますが、それ以前はたくさんのファイルが開かれていました。アップデートによるものかもしれません。

手動でリストをバックアップしたいのですが、何か他の解決策はないでしょうか?

 
Aleksey Mavrin:

何かアドバイスがあれば - MetaEditorのオープンファイルのウィンドウで、後でそれらを開くためにそれらのリストが保存されている場所?

時々、MEはゼロから開くが、その前に多くのファイルが開かれている。アップデートによるものかもしれません。

手動でリストをバックアップしたいのですが、何か他の解決策はないでしょうか?

レジストリにリストがあり、iniファイル "metaeditor.ini "にリストがあります。
2つ目の方が必要になる可能性が高いです。

 
fxsaber:

非常に古いバグです。

一度だけ、その通りに動いたことを確かに覚えています。
私はそれを確認しに行き、その配列から関数へのポインタを呼び出すためのいくつかのバリエーションを追加しました。

関数へのポインタの配列がクラス内にあり、特定の配列要素にoperator[]でアクセスすると、すべてがうまくいくことが判明しました。
同時に、普通の関数を使って要素にアクセスすると、またコンパイルエラー になる...。それは奇跡のようなものだ...。

 
インジケーターの自動再スケーリングをオーバーライドする方法はありますか?例えば、インジケータサブウィンドウに2つのチャートがあるとすると、片方のチャートでは縦軸のリスケーリングを行い、もう片方では行わないようにすることは可能でしょうか?2つ目のグラフがリスケーリングに影響しないように。
 
MT5(build 2375)で、オーバーロードされたテンプレート関数が呼ばれたとき、明示的に特殊化しても、デフォルトのテンプレート関数が呼ばれ、スタックオーバーフローになる不具合を修正しました。
C++オンライン(https://onlinegdb.com/BJTFdUDD8)
template<typename T>
void test(T &arr[], T value){
    printf("1");
};

template<typename T, typename TT>
void test(T* &arr[], TT* value){
    printf("2");
    test<T*>(arr, value);
};

class A{};

void OnStart(){
   void* arr[] = {};
   A* ptr;
   test(arr, ptr);         // result: 2,2,2,2,2,2,2,2,...    should be: 2, 1
}
 
bool s_sel = SymbolSelect("", true);
s_sel = true;

訂正してください。

 

ツールチップにはENUM値が1つだけ表示されます。