错误、漏洞、问题 - 页 2328

 
Alexey Navoykov:
你没有注意到。

或者说你,让我们直奔主题。

 
A100:

我提供了一个最简单的变体,它可以在明天(而不是10年后)实现,并且与C++相似(否则为什么要改变任何东西)。此外,如果operator*()没有也不会被实现(论坛上有相关信息),不清楚为什么operator->()会突然被实现(它们的顺序相同)。

明天或10年后都不需要这种形式。而且你不需要外部相似性,你需要的是功能。

至少从C++中部分地移植STL。这里不仅关系到运营商-->,我们需要更多。

operator->将是向智能指针迈出的第一步。


 

事实上,隐性演员现在的情况并不乐观。

class A
{};

class B : public A
{};

void OnStart()
{
   A* ab = new B;
   A* aa = new A;
   
   B* bb = ab; // ok
   
   B* ba1 = dynamic_cast<B*>(aa);
   Print(ba1 ? "ba1 ok" : "ba1 bad cast"); // bad cast

   B* ba2 = aa; // здесь неконтролируемый вылет
   Print(ba2 ? "ba2 ok" : "ba2 bad cast");
}

你可以看到,动态铸造包括在隐式铸造中


首先,我们不知道为什么在语言中明确存在动态投射的情况下会包括它。

其次,它被包含得非常糟糕,因为在函数的情况下,动态投掷的错误是可以控制的(错误的指针输出),但隐式投掷不能!因为它抛出一个不可控制的异常。

2018.11.23 20:31:47.348 test (AUDNZD,M5) 'test.mq5'中指针的铸造不正确(17,11)

它没有任何影响。

你要么给出一个无效的指针作为一个函数,要么把动态投射排除在隐式投射之外,并给出一个编译错误

 

是的,有了这个问题,用OOP工作是很难控制的,也是不可靠的。 在某个地方,你在程序的一个地方改变了类型,然后它在谁也不知道的地方爆炸了。 在这些例子中,你可以在某种程度上用拐杖逃脱,因为有简单的指针赋值,而且一切都在你面前。 但在一般情况下,当一个指针被传递到某个函数,并动态地转换为未知的东西,你没有办法来控制它。

 
Alexey Navoykov:

点是MQL中的一个通用运算符。

这取决于你如何看待它。你可以说它是通用的:它对对象和指针都有效。

或者你可以说,.只对对象起作用,而且只在指针被隐含地转换为对象的情况下对指针起作用,即在

class A {
public:
    void f() {}
} *a;

参赛作品

    a.f();

相当于不

    a->f();

a

    (*a).f();
 

有这样的结构

struct OrdersInfo
{
   int      ticket;
   string   symbol;
   int      type;
   double   volume;
   double   open_price;
   double   stop_loss;
   double   take_profit;
   string   comment;
   int      magic;
};

有一个变量OrdersInfo顺序,当我试图把它写进一个文件时

bool WriteStr(OrdersInfo &order)
{
   int handle = FileOpen(m_file_name, FILE_WRITE | FILE_COMMON | FILE_BIN);
   if(handle != INVALID_HANDLE)
   {
      if(FileWriteStruct(handle, order) == 0) return false;
      
      FileClose(handle);
   }
   
   return true;
}

编译器给出了:'order' - 不允许包含对象的结构

可能是什么问题?


 
Andrii Djola:

有这样的结构

有一个变量OrdersInfo顺序,当我试图把它写进一个文件时

编译器给出了:'order' - 不允许包含对象的结构

可能是什么问题?


这里

https://www.mql5.com/ru/docs/files/filewritestruct

列出了这些限制。

Документация по MQL5: Файловые операции / FileWriteStruct
Документация по MQL5: Файловые операции / FileWriteStruct
  • www.mql5.com
//|                                          Demo_FileWiteStruct.mq5 | //|                        Copyright 2013, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Структура для хранения данных свечи                              |...
 
谢谢你
 

MT4上的UPU 流量为负值,下载历史计数器开始增加 ...


 
当你进入任何作者的产品页面时,没有办法分辨哪些产品是用于正确的平台(4或5)。是否可以按平台来划分本页面的产品?