template<typename T> void F(T)
{
class A
{
void f() { new A; } // 'A' - declaration without typevoid g() { A* a; } // 'A' - pointer to this function type is not supported yet
};
};
voidOnStart()
{
F(0);
}
class A
{
};
class B : protected A
{
};
voidOnStart()
{
A* a;
B* b= (B*)a; // conversion from 'B *' to 'A *' is not accessible because of inheritance access
}
编译错误。
这里还有几个错误。
而且指针的转换也有问题。
以下代码不能编译。
尽管这里的转换是明确的。一切都在C++中运作。
而且,把路标带进来也有一些乱七八糟的事情。
这是对的,编译器在战斗。
去读一下dynamic_cast、static_cast和reinterpret_cast,以及何时正确使用它们,何时不使用。
C++将此代码转换为reinterpret_cast,MQL转换为dynamic_cast。而据我所知,这正是编译器在编译过程中能发现动态广播错误的情况。
在这种情况下,reinterpret_cast是不合法的,所以这个代码在C++中编译的事实不是一个论据。
C++将此代码转换为reinterpret_cast,MQL转换为dynamic_cast。而据我所知,这正是编译器在编译过程中能发现动态广播错误的情况。
在这种情况下,Reinterpret_cast是不合法的,所以这段代码在C++中编译的事实并不是一个论据。
等等,你为什么要把事情搞混? 动态投稿与此有什么关系? 编译器的任务并不包括扮演福尔摩斯,在程序逻辑中寻找什么。 它只对语言标准的符合性进行形式上的检查,仅此而已。 而且从标准的角度来看,一切都正确。
如果你仔细看了我的样本,你会发现问题与protected有关。 如果你把它改成public,一切都好了。对象本身并没有因此而改变。 也就是说,MQL编译器只是有一个不必要的限制,仅此而已。
所以不要猜测和寻找没有的秘密含义,这只是一个微不足道的编译器错误。