错误、漏洞、问题 - 页 98

 

我不明白 "狗被埋在哪里",代码可以工作,一切正常,但编译器警告 由于类型转换Indi.mqh 125 45可能导致的数据丢失让我感到疑惑。


//+------------------------------------------------------------------+
//|Получение значений позиций в средe BB цены AppPrice,Fast/Slow TEMA|
//+------------------------------------------------------------------+

void CIndi::SetPricePositions(ushort SymbolPosition,ushort Index,uchar AppPrice)
  {
   int handle=GetHandle(SymbolPosition,BANDS);
   double Upper =Upper_Band(handle,Index);
   double Base  =Base_Band(handle,Index);
   double Lower =Lower_Band(handle,Index);
   double FTema =GetValuesFromIndi(GetHandle(SymbolPosition,TEMA_FAST),0,Index);
   double STema =GetValuesFromIndi(GetHandle(SymbolPosition,TEMA_SLOW),0,Index);
   
   Bollinger[SymbolPosition][PRICE_POSITION]=(double)GetPricePos(handle,Index,AppPrice); ???
   Bollinger[SymbolPosition][FAST_POSITION] =(double)Custom.Position(Lower,Upper,FTema); ???
   Bollinger[SymbolPosition][SLOW_POSITION] =(double)Custom.Position(Lower,Upper,STema); ???
   Bollinger[SymbolPosition][UPPER]         =(double)Upper; ???
   Bollinger[SymbolPosition][BASE]          =(double)Base;  ???
   Bollinger[SymbolPosition][LOWER]         =(double)Lower; ???
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора - Документация по MQL5
 

对开发商而言。

据我所知,交换问题已经解决了?或者说,那就不清楚为什么这个话题从servicedesk..... 消失了。

 

测试一个EA

void OnTick(){
   Print(iTest());
}
//+------------------------------------------------------------------+
int iTest(){
   double i;
   int j;
   for(int x=3; x>0; x--) { 
      i=i+0.00001;
   }//Next x
   j=int(i/_Point);
   return(j);
}//iTest()

日志显示的数字不断增加!它应该是这样的吗?

在MQL4中,你应该写上

static double i;

 
EvgeTrofi:

在测试一个EA时

日志显示的数字不断增加!这应该是这样的吗?

是的,应该是这样。

你没有初始化局部变量 i,在随后的调用中,它被分配在堆栈的同一位置,与之前的调用相同。

Документация по MQL5: Основы языка / Переменные / Локальные переменные
Документация по MQL5: Основы языка / Переменные / Локальные переменные
  • www.mql5.com
Основы языка / Переменные / Локальные переменные - Документация по MQL5
 
Renat:

是的,应该是这样的。

你还没有初始化局部变量 i,在接下来的调用中,它将被分配到堆栈的同一位置,因为它在之前的调用中是这样。

在哪种情况下应该使用静态 内存类?

帮助中令人费解的一句话:"声明为静态的 局部变量具有一个块的范围,尽管它们从程序执行开始就存在",请解释。这句话中似乎有一个句法或语法上的错误 :)

注意帮助中的例子:https://www.mql5.com/ru/docs/basis/variables/static

如果你从代码中删除静态 字,什么也不会改变。

int Counter()
  {
   int count;
   count++;
   if(count%100==0) Print("Функция Counter была вызвана уже ",count," раз");
   return count;
  }
void OnStart()
  {
//---
   int c=345;
   for(int i=0;i<1000;i++)
     {
      int c=Counter();
     }
   Print("c = ",c);
  }

问题:如果没有静态,我们为什么需要静态 呢?

Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - Документация по MQL5
 
ALozovoy:
你好。你在[测试器]的描述中缺少ExpertParameters参数。你可以在帮助中找到更多关于它的信息。

谢谢你,它正在工作。

 


请告诉我,当初增加在块内声明变量的能力的目的是什么?以前在这样的情况下。

  
int c;    for(int i=0;i<1000;i++)      {        int  c=Counter(); }

以前,会弹出一个框,指出一个直接被声明了两次,很明显,你必须为这个变量想出另一个名字,或者使用相同的名字,但没有int。但现在可能会变得很混乱。在C++中也是如此吗?

(在学习MQL之前,我曾经用Visual Basic编程。那里没有这样的混乱)。

 
EvgeTrofi:

那么在哪种情况下应该使用静态 内存类


没有。

如果你创建了一个变量int i;,你为什么不初始化它?事实上,你自己说 "我不关心这个变量里有什么",结果里面是垃圾。

正确的方法是int i=0

C++中也是这样吗?

是的,这是正确的--你可以在一个块内创建这样的变量。
 

我在Windows 7 64位的终端306 Bild上遇到了一个问题(Windows 7 32位的一切工作正常)。

附加的文件:
mql64.png  52 kb
 
VanHelsing:

我在Windows 7 64位的终端306 Bild上遇到了一个问题(Windows 7 32位的一切工作正常)。

请在servicedesk中发布一段出现这种情况的代码。