错误、漏洞、问题 - 页 1416

 
什么时候会出现 "内部编译器错误"?  
伊利亚斯
,到目前为止我们知道有两个案例。
1) 在bool &=操作中(bool表达式)。
2)初始化序列 中不必要的逗号 val={ {...},{...},}。

这些错误在新版本中仍未修复吗? 我的编译器仍会产生错误,我必须坚持使用1159版本。

 
Renat Fatkhullin:
对模板的要求是把所有的方法放在类的描述里面,而不把主体放在外面。

我明白了,最主要的是保持这一要求,因为刚刚创建了堆栈和队列容器,一个月后出现了类模板,有了它们,一切都应该更好地工作 :)

另一个问题是关于类模板。有两个模板类,一个类使用另一个,一个类型是否会从一个模板类转移到另一个?

 
coderex:

我明白了,最主要的是保持这一要求,因为刚刚创建了堆栈和队列容器,一个月后出现了类模板,有了它们,一切都应该更好地工作 :)

另一个问题是关于类模板。有两个模板类,其中一个类使用了另一个类,到底会不会有一个模板类的类型转移到另一个模板类?

试试吧。
 
Renat Fatkhullin:
试试吧。
我试了一下,出现了一些错误,想到了另一种方法......。
 

Ilyas:
На сегодня известно о двух случаях:
1) в операции bool &= (bool expression)
2) Лишняя запятая в инициализирующих последовательностях: val={ {...},{...}, }

阿列克谢-纳沃伊科夫。
这些错误在新版本中还没有修复吗? 我的编译器仍然给我一个错误,我必须保持在1159版本上。

为了以防万一,在MT4 890中检查了第2页的额外逗号--只是给出错误信息
 

有没有人做过CList 分类?

基本上我们需要覆盖比较。

但我一直在调用基类的比较。但它不工作,我想知道这里有什么问题......

做了一个简单的例子。

class COperation : public CObject
  {
public:
   double           number;
   COperation(double p) { number = p;}

virtual int Compare(const CObject *node,const int mode=0);
  };
  
 int COperation::Compare(const CObject *node,const int mode=0)
  {
   const COperation *ppp = node;
   
   if(this.number > ppp.number)
     {
      return 1;
     }
   if(this.number < ppp.number)
     {
       return -1;
     }
   
  return 0;
 }   


void OnStart()
  {
   CList *list = new CList();
   list.Add(new COperation(3));
   list.Add(new COperation(4));
   list.Add(new COperation(7));
   list.Add(new COperation(2));
   list.Add(new COperation(3));
   list.Add(new COperation(9));
   list.Add(new COperation(0));
   list.Add(new COperation(1));
   
   Print("After Sort");
   COperation *node = list.GetFirstNode();
   string numbers = "";
   for(;node != NULL; node = node.Next())
     {
      numbers += (string)node.number + " ";
     }
    Print(numbers); 
    numbers = "";
     
   list.Sort(0);
   
   Print("Before Sort");
   node = list.GetFirstNode();
   for(;node != NULL; node = node.Next())
     {
      numbers += (string)node.number + " ";
     }
   Print(numbers); 
   
   
   delete list;
  }
附加的文件:
sort.mq5  3 kb
 

在处理嵌套模板(MQL4)时,我看到类型传递的故障--有人注意到吗?

特别是,有一个类A有一个模板方法,在这个方法里面,另一个类B的对象是由一个模板构造器使用方法初始化的相同类型T创建的。结果,在该方法中,typename正确地定义了传入的类型,例如int,但在B构造函数中,typename已经是string。

SD?

 
最正统的排序方式是将表重载到一个数组中,对数组进行排序,再重载回来。
 

我一直在使用排序 - 完全没有问题。

你,sigma7i,错误地重载了方法Coperation::Compare(),它返回错误的值类型,而基方法CObject::Compare() 返回的是错误的值,编译器认为它是独立的,不是虚拟的。其结果是,在你的对象中只有基方法被调用,编译器认为没有后裔。

 
sigma7i:

但它一直在调用基类的比较。但它不工作,所以我认为有什么问题......

virtual int Compare(const CObject *node,const int mode=0) const;
原因: