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

 

コンパイルエラーです。

#define  MACRO( x )      ((x) + 2)
struct A {
        A( int, int ) {}
};
template<typename T>
struct B {
        static A a;
};
template<typename T>
A B::a( MACRO(1), 2 ); //error: '(' - declaration without type
また、template<typename T>がなくても問題ないのですが、何が違うのでしょうか?
 
A100:

コンパイルエラー

そして、template<typename T>を使わない場合......なるほど、何が違うのでしょうか?

マクロの中の余分な括弧のせいです。

struct A {
        A(int) {}
};

template<typename T>
struct B {
        static A a;
};
template<typename T>
A B::a((0));

それらを削除すれば、コンパイルできます。

 
fxsaber:

マクロの中の余分な括弧のせいです。

それらを削除すれば、コンパイルできます。

template<typename T> を削除すれば、(括弧付きでも)コンパイルできるようになります。
 
A100:

.log files %AppData%MetaQuotes³³...\MQL5³³Logs³³YYMMDD.log are not updated promptly.

アップデートは、端末を再起動した後、または表示メニューを選択した後のみ行われます。再起動やプレビューをクリックしない場合、対応するファイルは空になります。

以前はうまく動作しており(MetaEditor で開いた YYYYMMDD.log ファイルでさえ、Experts タブで行を表示した後、数秒で自動的に更新されていました)、明白ではない余計なアクションを実行する必要はありません。

IMHOでは、ログサイズが小さい場合は常にそのようになっています(フォーラムのどこかにキャッシュダンプを開始するサイズについての情報がありました)。ディスクへのフラッシュを初期化するために、いつもコンテキストメニューを 呼び出す必要がありました。

 
Stanislav Korotky:

IMHOでは、ログサイズが小さい場合は常にそうなっています(キャッシュのリセットが始まるサイズについては、フォーラムのどこかに情報がありました)。ディスクへのフラッシュを初期化するために、いつもコンテキストメニューを呼び出す必要がありました。

あなたのIMHOの意味がよくわからないのですが。build <= 1596 (32bit)で確認(1行でもすぐに.logファイルに出力[5-10秒])してください。1分前に確認しました。

(静流の声) どのキャッシュ? (静流の声) どのキャッシュ? (静流の声) どこかで何かあったんでしょ?

ExpertsタブとMQL5Logsフォルダについてです。

 
A100:
template<typename T>を削除すれば、それもコンパイルされます(括弧付きでも)。

まあ、「すべて削除すればコンパイルできる」という部類のフレーズですね。

エラーの原因については、まさにテンプレートで話していました。その理由は、括弧が追加された状況でテンプレート構文を解析する際のコンパイラの動作が正しくないからです。テンプレートを導入した人は、どこに問題があるのか、なぜ問題が発生するのかがすぐにわかります。

 

こんにちは、私は2つの指標iMACD_1 カラー、シグナルラインとiMACD_2を別のウィンドウに表示するタスクを持っている、ここにコードの一部があります。

インデックスを作成しました。

   SetIndexBuffer(0,MACDBuffer_1,INDICATOR_DATA);
   SetIndexBuffer(1,buffer_color_histogram,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,Signal_Line,INDICATOR_DATA);
   SetIndexBuffer(3,MACDBuffer_2,INDICATOR_DATA);

インジケータへのポインタを入手

 handle_1=iMACD(name,period,fast_ema_period,slow_ema_period,signal_period,applied_price); 
 handle_2=iMACD(name_,period_,fast_ema_period_,slow_ema_period_,signal_period_,applied_price_);

(と不思議に思う))。

理論的には、インジケータを表示するように動作するはずです。

      if(CopyBuffer(handle_1,0,0,values_to_copy,MACDBuffer_1)<0)return(0);
      if(CopyBuffer(handle_1,1,0,values_to_copy,Signal_Line)<0) return(0);
      if(CopyBuffer(handle_2,3,0,values_to_copy,MACDBuffer_2)<0) return(0);

効かない!?

しかし、その仕組みは次のようなものです。

      if(CopyBuffer(handle_1,0,0,values_to_copy,MACDBuffer_1)<0)return(0);
      if(CopyBuffer(handle_1,1,0,values_to_copy,Signal_Line)<0) return(0);
      if(CopyBuffer(handle_2,0,0,values_to_copy,MACDBuffer_2)<0) return(0);

動作はしているのですが、インジケーターバッファの数の何が問題なのかが解りません。ありがとうございました。

 

コンパイルエラーです。

template<typename T>
struct A {
        static int a1;
        static int a2;
};
template<typename T>
int A::a1;
template<typename T>
int A::a2;
struct B : A<int> {
        void f1() { Print( A<int>::a1 ); } //unresolved static variable 'A<int>::a1'
        void f2() { Print(         a2 ); } //unresolved static variable 'B::a2'
};

また、template<typename T> を使用しない場合は、問題ありません。

 
vitrix:

こんにちは、私は2つの指標iMACD_1 カラー、シグナルラインとiMACD_2を別のウィンドウに表示するタスクを持っている、ここにコードの一部があります。

インデックスを作成しました。

インジケータへのポインタを入手

(と不思議に思う))。

理論的には、インジケータを表示するように動作するはずです。

効かない!?

しかし、その仕組みは次のようなものです。

動作はしているのですが、インジケーターバッファの数の何が問題なのかが解りません。ありがとうございました。


次回は、投稿(私が訂正したあなたの投稿)のコードの挿入 方法を覚えておいてください。

2つ目:iMACDインジケーターには2つのバッファしかありません:「0」-MAIN_LINE、「1」-SIGNAL_LINEです。つまり、インジケータ値を取得するには、次のようになります。

   CopyBuffer(handle_iMACD,MAIN_LINE или SIGNAL_LINE,index - номер буфера с которого начинаем копирование,values_to_copy,buffer)
 
A100:

コンパイルエラーです。

また、template<typename T> を使用しない場合は、問題ありません。

template<typename T>
struct A {
        static int a1;
        static int a2;
};
template<typename T>
int A::a1 = 0;
template<typename T>
int A::a2 = 0;
struct B : A<int> {
        void f1() { Print( A<int>::a1 ); } //unresolved static variable 'A<int>::a1'
        void f2() { Print(         a2 ); } //unresolved static variable 'B::a2'
};