错误、漏洞、问题 - 页 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
而没有模板<typename T>也很好......有什么区别?
 
A100:

编译错误

而没有模板<typename T> - 好吧...有什么区别?

这是宏中的额外括号。

struct A {
        A(int) {}
};

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

如果你去掉它们,它就会被编译。

 
fxsaber:

这是宏中的额外括号。

如果你去掉它们,它就会被编译。

如果你删除了模板<typename T>,它也会被编译(即使有括号)。
 
A100:

.日志文件%AppData%\MetaQuotes\Terminal\...\MQL5\Logs\YYYYMMDD.log没有及时更新。

更新只发生在:重启终端后或选择查看菜单后。如果你不重新启动或点击预览,相应的文件将是空的。

它曾经工作得很好(甚至在MetaEditor中打开的YYYYMMDD.log文件在专家标签中显示行后,也会在几秒钟内自动更新),而且不需要执行额外的非明显的操作。

我认为,如果日志大小较小的话,它一直都是这样的(论坛上有关于大小的信息,在这个时候缓存开始倾倒)。我总是不得不调用上下文菜单 来初始化刷新到磁盘。

 
Stanislav Korotky:

IMHO,如果日志大小较小的话,一直都是这样的(论坛上有关于缓存重置开始时的大小的信息)。我总是不得不调用上下文菜单来初始化刷新到磁盘。

我不太明白你的IMHO的意义。采取建立<=1596(32位)和检查(立即输出到.log文件[5-10秒]甚至一行)。我一分钟前检查了它。

[哪个缓存?哪个总是?有关于某个地方的东西!?]

这是关于专家标签和MQL5\Logs\文件夹的问题。

 
A100:
如果你删除模板<typename T>,它也会被编译(即使有括号)。

好吧,这是一个来自 "如果你删除所有的东西,它将被编译 "类别的短语。

我说的是错误的原因,正是用模板。原因是编译器在解析带有额外括号的模板结构时的行为不正确。任何实施过这些模板的人都能立即看到问题所在以及问题发生的原因。

 

大家好,我有一个任务是在一个单独的窗口中显示两个指标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'
};

而没有模板<typename T> - 很好

 
vitrix:

大家好,我有一个任务是在一个单独的窗口中显示两个指标iMACD_1 的颜色、信号线和iMACD_2,这里是部分代码。

我已经做了索引

有指向性的指标

(然后是疑惑))

理论上,它应该可以显示指标

它不起作用!

但它的工作原理是这样的

它可以工作,我不知道指标缓冲区的数量有什么问题。提前感谢 !!!


请下次记住如何在帖子中插入代码(你的帖子我已改正)。

第二:iMACD指标只有两个缓冲区:"0" - MAIN_LINE,"1" - SIGNAL_LINE。因此,要获得指标值将是这样的。

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

编译错误。

而没有模板<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'
};
原因: