错误、漏洞、问题 - 页 2735

 
我有个问题,我现在怎么能找到免费的信号?我定期手动找到它们,但信号页面只显示付费信号。按价值过滤并不能让我找到它们。
 
重新编译与测试器中选择的专家顾问相连接的库,在下一次运行时不会被选中。我必须在测试器中选择另一个专家顾问,然后切换到前一个。只有这样,测试人员才会拿起新库。完全不明显的错误。
[删除]  
Stanislav Korotky:
重新编译连接到专家顾问的库,在测试器中被选中,在下一次启动时不会导致它被选中。我必须在测试器中选择另一个专家顾问,然后切换到前一个。只有这样,测试人员才会拿起新库。完全不明显的错误。

在稳定版中也是如此...

 
MT5错误(build 2407)当类包含一个指向使用该类作为字段的包装类的指针时,会出现编译错误。
C++在线:https://onlinegdb.com/SJN1shM58
template<typename T>
class wrapper{
public:
   T data;
};

class B{
public:
   wrapper<B>* ptr;             // undefined class 'B' cannot be used
};


void OnStart(){  
   B b;
   b.ptr = new wrapper<B>();
   printf("%p", b.ptr);
} 
 
一个编译错误。
int i = f(); //Error: 'f' - undeclared identifier
void OnStart()
{
}
int f() { return 0; }

但除此之外。

void OnStart()
{
int i = f(); //нормально
}
int f() { return 0; }

很好。这有什么区别呢?

 
A100:
这是一个编译错误。

但这种方式。

你应该这样写你的第一个例子--用正向描述,顺便说一下,结构和类的正向描述也可以用

int f(int);
int i = f(5);
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int f(int v)
{
   return v * v;
}
//+------------------------------------------------------------------+

2020.05.10 17:23:27.704 tst1 (ETHUSD,M1) i = 25

A100:

好的。有什么区别呢?

我认为编译器从上到下进行解析,在最后,OnStart()将被最后分析。
 
Igor Makanu:
我认为编译器从上到下进行解析,OnStart()将最后被分析。

在这种情况下,不需要思考--规则应该是一般性的:如果一个函数可以在声明之前应用,那么它就可以,如果不可以,那么它就不能。 因此,这两种情况都必须要么编译,要么不编译

 
A100:

在这种情况下,不需要思考--规则应该是一般性的:如果一个函数可以在声明之前应用,那么它就可以,如果不可以,那么它就不能。 因此,这两种情况都必须是可编译或不可编译。

唉,这就是所谓的语言特性,你可以这样写

int f(int v)
{
   return v * v;
}
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int i = f(5);
 
Igor Makanu:

唉,这些都叫语言 的特殊性,你可以这样写。

所有的特殊性都反映在文件中。我在那里没有看到这个人。因此,结论是:这不是一个特点,而是一个缺陷。

 
A100:

在这种情况下,不需要思考--规则应该是一般性的:如果一个函数可以在声明之前应用,那么它就可以,如果不可以,那么它就不能。 因此,这两种情况都必须要么编译,要么不编译。

这是此类语言的C语言的正常行为。

没有正向函数声明,它们就不能被使用。与全局层面的直接调用相比,来自OnStart的调用实际上延迟了编译。

在C++中,将产生完全相同的错误。