错误、漏洞、问题 - 页 1615

 
大家好。当MT5服务器连接中断时,有什么方法可以重新登录账户吗?
 

编译错误。

class A
{ 
};

template<typename T>  void func(T *const &a[])  { } 


void OnStart()
  {
    A *const a[] = { NULL };
    func(a);      //  'a' - cannot convert from const pointer to nonconst pointer
  }
 

这里还有几个错误。

template<typename T> void F(T)
{
  class A
  {
    void f()  { new A; }  // 'A' - declaration without type
        
    void g()  { A* a; }   // 'A' - pointer to this function type is not supported yet
  };
};


void OnStart()
  {
    F(0);
  }
 

而且指针的转换也有问题。

以下代码不能编译。

class A
{
};

class B : protected A
{
};

void OnStart()
  {
    A* a;
    B* b= (B*)a;  // conversion from 'B *' to 'A *' is not accessible because of inheritance access
  }

尽管这里的转换是明确的。一切都在C++中运作。

 
Alexey Navoykov:

而且,把路标带进来也有一些乱七八糟的事情。

这就对了,编译器发誓。
 
Комбинатор:
这是对的,编译器在战斗。
什么是正确的? 打开C++并检查它应该是怎样的。
 
Alexey Navoykov:
去读一下dynamic_cast、static_cast和reinterpret_cast,以及何时正确使用它们,何时不使用。
 
Комбинатор:
去读一下dynamic_cast、static_cast和reinterpret_cast,以及何时正确使用它们,何时不使用。
让我们避免不必要的泛滥和哲学,好吗? 我们谈论的是一个特定的结构,它应该被编译。
 
Alexey Navoykov:

C++将此代码转换为reinterpret_cast,MQL转换为dynamic_cast。而据我所知,这正是编译器在编译过程中能发现动态广播错误的情况。

在这种情况下,reinterpret_cast是不合法的,所以这个代码在C++中编译的事实不是一个论据。

 
Комбинатор:

C++将此代码转换为reinterpret_cast,MQL转换为dynamic_cast。而据我所知,这正是编译器在编译过程中能发现动态广播错误的情况。

在这种情况下,Reinterpret_cast是不合法的,所以这段代码在C++中编译的事实并不是一个论据。

等等,你为什么要把事情搞混? 动态投稿与此有什么关系? 编译器的任务并不包括扮演福尔摩斯,在程序逻辑中寻找什么。 它只对语言标准的符合性进行形式上的检查,仅此而已。 而且从标准的角度来看,一切都正确。

如果你仔细看了我的样本,你会发现问题与protected有关。 如果你把它改成public,一切都好了。对象本身并没有因此而改变。 也就是说,MQL编译器只是有一个不必要的限制,仅此而已。

所以不要猜测和寻找没有的秘密含义,这只是一个微不足道的编译器错误。