错误、漏洞、问题 - 页 1182

 
Zeleniy:

优化是没有用的。

2014.08.05 19:34:42 测试仪没有选择优化参数,请检查要优化的输入,并仔细设置开始、步骤和停止值。

翻译没有给出任何东西。

你说 "没有什么 "是什么意思?翻译应该给你一些东西,比如你必须至少选择一个参数进行优化,并确保开始、结束和步骤值是正确的。
 
marketeer:
你是什么意思,"没有什么"?翻译应该给我一些东西,比如说我应该至少选择一个参数进行优化,并确保测试的开始、结束和步骤是正确的。
太奇怪了,我什么都不明白,也许我只是累了,第二天我还在纠结于错误。谢谢你,我将依靠你的话。
 

我面临这样的问题:我需要将两个同一类的对象相互比较,为了方便,我决定重载运算符==。 结果发现,如果对象是动态的,我的运算符就不会被执行,而不是对象本身的指针被比较。嗯,这在原则上是有道理的,通过指针跳转到对象的操作是需要的:*a == *b。我们必须补充。

class T {   int x;

public:

T (int value) { x=value; }   bool operator==(T& other) { Print("compare1");  return x==other.x; }   bool operator==(T* other) { Print("compare2");  return x==other.x; } }; //------------------ void OnStart() {   T* a= new T(10);   T* b= new T(10);      Alert(a==b);      delete a;   delete b; }

 

虽然我刚刚想到,考虑到语言的特殊性,我们在比较指针而不是对象,这从根本上是错误的。 毕竟,MQL是一种托管语言,"对象 "这个概念在这里被使用,不管对象是如何存储的,如何被访问。成员和方法在任何情况下都可以通过点来访问。相应地,比较运算符对静态选择的对象和动态对象都应该以同样的方式工作。 如果你需要比较指针,你应该使用GetPointer() 来做。

 
meat:

虽然我只是在想,鉴于语言的特殊性,存在指针而不是对象本身的比较这一事实从根本上是错误的。

没有必要在MQL中发明与C++相抵触的比较规则,只要你能通过其他方式做到这一点。如果你有指针,你需要比较对象--使用比较函数。
bool Compare(const T& t1, const T& t2 ) { return ( t1 == t2 ); }

Alert( Compare( a, b ));
允许一个形式的记录(*a == *b)是一回事,给记录赋予不同的意义(a == b)是另一回事。
 

测试专家顾问 时,它产生了一个错误

为OrderSend函数提供了无效的外差。

OrderSend错误4107

我怎样才能在不进入代码的情况下修复它?

 
A100:
在MQL中没有必要发明与C++相矛盾的比较规则,只要可以使用其他手段就可以了。如果你有指针,并且你需要比较对象,请使用比较函数 建议允许一个(*a == *b)类型的条目是一回事,而给(a == b)条目赋予不同的含义是另一回事

好吧,我在解释MQL的规则与C++的规则相矛盾。 在这里用指针指代一个对象是用点来完成的,而如果我们遵循C++的规则,应该用->来完成。

也就是说,"指针 "和 "对象 "在C++中是两个完全不同的概念,这就是为什么语法不同的原因。 一切都是严格的。 但是在这里,一切都混在了一起。 看起来就像我们在处理一个指针的属性和方法。我并不是说这不好,这对OOP来说更方便,例如C#中就是这样做的。 但这样一来,其他所有的东西都必须以同样的方式实现。 必须有一个单一的概念。 否则就会出现矛盾和混乱:在某些情况下,我们使用指针的方式与对象本身相同,而在其他情况下,指针突然出现了。

在实际操作方面,我已经遇到了一个问题:我的代码使用的是静态对象。 然后我决定用动态对象取代其中的一些对象。 结果,比较和赋值操作开始变得非常不同。而这个问题很难被发现,因为程序继续编译并正常工作,但不是以它应该的方式。

 

我的代码中有些类包含一些对象。

CClass
{
  ...
  CObj  Object; 
  ...
};

CObj类是在它之前声明的。

当试图编译时,我得到了以下错误:'Object' - 不能取消设置

这个错误是什么意思,其原因是什么? 我不记得以前遇到过这个错误。 CObj类有一个构造函数和解构函数。

我试着把Object简单地声明为一个变量--一切正常。 但当它是一个类的一部分时,它不会这样做。

 
那么,谁能解释一下这个错误("-不能取消设置")是什么? 它什么时候发生?
 
meat:
那么,谁能解释一下这个错误("-不能取消设置")是什么? 它什么时候发生?
ZeroMemory函数 不能用于此对象。