MQL4/5 CList 搜索方法总是返回空指针
MQL4/5 CList Search method always returning null pointer
我正在尝试在应用程序中使用 CList 搜索 方法。我在下面附上了一个非常简单的例子。
在这个例子中,我总是在变量 result
中得到一个空指针。我在 MQL4 和 MQL5 中尝试过。有没有人使搜索方法起作用?如果是这样,我的错误在哪里?关于我的问题,我参考了 MQL 中链表的 this 实现(这是标准实现)。当然,在我的应用程序中,我不想找到第一个列表项,而是符合特定条件的项。但即使是这个微不足道的例子也不适合我。
#property strict
#include <Arrays\List.mqh>
#include <Object.mqh>
class MyType : public CObject {
private:
int val;
public:
MyType(int val);
int GetVal(void);
};
MyType::MyType(int val): val(val) {}
int MyType::GetVal(void) {
return val;
}
void OnStart() {
CList *list = new CList();
list.Add(new MyType(3));
// This returns a valid pointer with
// the correct value
MyType* first = list.GetFirstNode();
// This always returns NULL, even though the list
// contains its first element
MyType* result = list.Search(first);
delete list;
}
CList
是一种链表。经典的数组列表是 CArrayObj
in MQL4/5 with Search()
和一些其他方法。在调用搜索之前,您必须对列表进行排序(因此实现 virtual int Compare(const CObject *node,const int mode=0) const
方法)。
virtual int MyType::Compare(const CObject *node,const int mode=0) const {
MyType *another=(MyType*)node;
return this.val-another.GetVal();
}
void OnStart(){
CArrayObj list=new CArrayObj();
list.Add(new MyType(3));
list.Add(new MyType(4));
list.Sort();
MyType *obj3=new MyType(3), *obj2=new MyType(2);
int index3=list.Search(obj3);//found, 0
int index2=list.Search(obj2);//not found, -1
delete(obj3);
delete(obj2);
}
我正在尝试在应用程序中使用 CList 搜索 方法。我在下面附上了一个非常简单的例子。
在这个例子中,我总是在变量 result
中得到一个空指针。我在 MQL4 和 MQL5 中尝试过。有没有人使搜索方法起作用?如果是这样,我的错误在哪里?关于我的问题,我参考了 MQL 中链表的 this 实现(这是标准实现)。当然,在我的应用程序中,我不想找到第一个列表项,而是符合特定条件的项。但即使是这个微不足道的例子也不适合我。
#property strict
#include <Arrays\List.mqh>
#include <Object.mqh>
class MyType : public CObject {
private:
int val;
public:
MyType(int val);
int GetVal(void);
};
MyType::MyType(int val): val(val) {}
int MyType::GetVal(void) {
return val;
}
void OnStart() {
CList *list = new CList();
list.Add(new MyType(3));
// This returns a valid pointer with
// the correct value
MyType* first = list.GetFirstNode();
// This always returns NULL, even though the list
// contains its first element
MyType* result = list.Search(first);
delete list;
}
CList
是一种链表。经典的数组列表是 CArrayObj
in MQL4/5 with Search()
和一些其他方法。在调用搜索之前,您必须对列表进行排序(因此实现 virtual int Compare(const CObject *node,const int mode=0) const
方法)。
virtual int MyType::Compare(const CObject *node,const int mode=0) const {
MyType *another=(MyType*)node;
return this.val-another.GetVal();
}
void OnStart(){
CArrayObj list=new CArrayObj();
list.Add(new MyType(3));
list.Add(new MyType(4));
list.Sort();
MyType *obj3=new MyType(3), *obj2=new MyType(2);
int index3=list.Search(obj3);//found, 0
int index2=list.Search(obj2);//not found, -1
delete(obj3);
delete(obj2);
}