新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1097

 
Seric29:

一个指向函数的指针被作为参数传递。我看到没有人想出如何用类来做这件事。我也还是不明白为什么要返回一个指向类的指针。

这里有一些有趣的样本,但它们与我的问题无关。

我也在指南中看到过类似的东西,但我已经关闭了这些网站,因为我的手受伤了,我还有工作要做。

我为什么要用这么奇怪的方式来玩弄这么简单的任务呢?你可以简单地通过一个类对象获得所需的数据

我熟悉引用、指针和函数指针,但我在实践中很少使用它们。一般来说,我认为它们只是为了节省内存--带指标的专家顾问系统不是游戏,所以我们可以在全局范围 内用普通变量和类对象进行管理。

 
Alexandr Sokolov:

如此简单的任务,为何要如此大费周章?你可以简单地通过一个类对象获得所需的数据

我熟悉引用、指针和函数的指针,但我很少使用它们。在我看来,它们只是为了节省内存而必须的,带指标的专家顾问不是游戏,因此,我们可以在全局范围 内使用普通变量和类对象。

我不想在一个简单的任务上弄得花里胡哨,当然,我也会修改我的程序,在以前调用函数的地方,我写一个算术表达式来简化计算,或者切换到一个简化的重载函数,所以我想把程序翻译成类。但正如你上面写的,而且很少使用它们,现在的问题是类是有的,但创建指向这个类的函数的指针是不可能的,为什么需要这种编程,如果你做了一个就不能做另一个,这不是编程,而是鬼知道什么。

 
Seric29:

我不想在一个简单的任务上弄得花里胡哨,当然我也会重做我的程序,以前是调用一个函数,我写一个算术表达式来简化计算,或者切换到一个简化的重载函数,所以我想把程序翻译成类。但正如你上面写的那样,很少使用它们,现在的问题是类是存在的,但创建指向这个类的函数的指针是不可能的,为什么需要这种编程,如果你做了一个,你就不能做另一个,这不是编程,而是鬼知道什么。

一个类是某个对象的模板,为了使用这个模板中的功能--你必须先创建一个对象。

实质上,类名就像一个数据类型,像int、double、string等,但有扩展功能。你不能在没有指定其类型的情况下声明一个变量。

在此基础上,你可以简单地将函数从类中分离出来,它可以在类中使用,也可以从类中分离出来,而不需要创建一个对象。

 

除了其文件从相应的文件夹中被删除外,还能有什么其他原因导致该指标不能工作? (该指标已被编译并在一个终端中工作,但在另一个终端中不工作)


 
Alexandr Sokolov:

类是某个对象的模板,为了使用这个模板中的功能,你必须先创建一个对象。

事实上,类名就像一个数据类型,像int、double、string等,但有扩展功能。你不能在没有指定其类型的情况下声明一个变量。

在此基础上,你可以简单地将函数从类中分离出来,它可以在类中使用,也可以从类中分离出来,而不需要创建一个对象。

除非。好吧,只是类是一个复杂的话题,参考书上有很多关于转移的例子,关于创建引用和指针,我认为这是可能的(至少在c++中是可能的,但mql4与c++无关),有必要了解它的工作原理。帮助显示了这些例子,它们非常复杂和超载,而不是上一堂课,显示一个简单的例子,他们用额外的计算和信息超载,我无法理解他们的意思,我关闭了所有这些链接,因为疲惫和疲倦。 好吧,那我就从班上抽出函数。

 
Alexandr Sokolov:

除了其文件从相应的文件夹中被删除外,还能有什么其他原因导致该指标不能工作? (该指标已被编译并在一个终端中工作,但在另一个终端中不工作)


从市场上?

 
Alexandr Sokolov:

除了其文件从相应的文件夹中被删除外,还能有什么其他原因导致该指标不能工作? (该指标已被编译并在一个终端中工作,但在另一个终端中却不工作)


在终端和专家顾问日志中看到信息

你的截图只显示该指标没有源代码

 
Alexandr Sokolov:

除了其文件从相应的文件夹中被删除外,还能有什么其他原因导致该指标不能工作? (该指标已被编译并在一个终端中工作,但在另一个终端中不工作)


也许它需要额外的库
 
Сергей Таболин:

从市场上?

没有

伊戈尔-马卡努

看到终端和专家顾问日志中的信息

你的截图只显示了这个指标没有来源

谢谢你

MakarFX
也许它需要额外的库

完全没有,是我写的--我知道

 

请告诉我为什么编译器在下面的MQL4测试脚本代码中会产生警告。

#property strict

struct st_sig {
   string   sym;           // Symbol
   int      age;           // Bars ago
}; st_sig Signals[];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {

   BubbleSort(Signals);
   
}

//+----------------------------------------------------------------------------+
void BubbleSort(st_sig &sig[]) {
  double t;
  int    i, j, n=ArraySize(sig);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (sig[j].age>sig[j+1].age) {
        t=sig[j].age;
        sig[j].age=sig[j+1].age;
        sig[j+1].age=t;       // Line#27 with warning
      }
    }
  }
}

第27行有一个关于数据类型不匹配的警告。两个变量都有相同的int类型。下面是一个脚本编译的截图。

如果我把第27行改为

sig[j+1].age=(int)t;

警告没有显示出来。

有什么诀窍吗?