错误、漏洞、问题 - 页 1360

 
A100:
这就是我的建议。
...
只有 == 和 != 操作受到变化的影响。
其他的一切,包括=运算符,都应该保持现在的样子(不改变)。

如果现在导致指针和对象本身之间的混淆,怎么能不改变=操作符呢? 如果你对它使用*,那么它也应该被用于所有其他操作符。必须有一个单一的标准。 你所建议的是,编译器应该自己选择正确的标准--这是不对的。 会有很多难以发现的错误。 一切都应该是明确的:要么用一个对象,要么用一个指针进行操作。

当然,所有这些星号都是被迫的拐杖。 我们必须改变开发者从一开始就选择的不是很好的整个概念,我认为。

我们应该摆脱与C++的绑定,分别放弃使用指针作为独立的变量类型,用引用代替。 引用本质上与指针相同,只是被编译器解释为对象本身。因此,所有带有这些变量的操作,包括运算符,都被视为带有对象的操作。 如果你需要准确地比较或分配引用,请使用引用运算符。 因此,不会出现矛盾。

 A  a;                     // воздаём объект
 A& aref;                  // создаём неинициализированную ссылку

 &aref = &a;                // присваиваем ссылку на a
 bool equalref = &aref==&a; // сравниваем ссылки

 aref = a;                  //вызываем оператор=()
 bool equal = aref==a;      // вызываем оператор==()

总而言之,如果开发者曾经设想过MQL6,我们应该朝这个方向发展。 与C++的绑定已经没有意义,因为它不符合语言的概念。

 
A100:
你最近的更新是什么?

MetaTrader和MetaEditor都建立了1159(Windows 10 32位)。在大型PC(64位)上,我不确定MetaEditor,但MetaTrader绝对是1159版本。
 
A100:
你最近的更新是什么?

我有1150。看不到升级到后来的1159的情况。
 
Gennadiy Stanilevych:
我有1150。没有看到更新到后来的1159。
你需要连接到MetaQuotes-Demo服务器以获得最新的更新。
 
A100:
MetaQuotes-Demo是有意义的,因为之前它每个月更新2-3次。很明显,经纪人的更新频率要低得多。
卡尔普托夫-弗拉基米尔
你需要连接到MetaQuotes-Demo服务器以获得最新的更新。

同意,通过MetaQuotes-Demo更新,仍然是1150点!而终端几次通知我,更新已经下载,并提出重启,还是1150。

好吧,我从http://www.metatrader5.com/ru/download 下载了分发包,在MetaQuotes-Demo上开了一个模拟账户,关闭和打开终端数次--1150!禁用UAC,Windows 7 SP1 - 64

Скачать MetaTrader 5
Скачать MetaTrader 5
  • www.metatrader5.com
Скачать торговый терминал MetaTrader 5 для комфортной и успешной работы на финансовых рынках. Терминал обладает внушительными торговыми и аналитическими возможностями и является одним из лучших в мире
 

我重复一下这个问题,因为没有人回答,而且因为关于OOP的激烈讨论,这个问题已经下去了。这个问题真的很重要,它是一个错误还是一个特点?我在MT4上注意到它。

我遇到过这样一种情况:在程序执行 过程中,外部变量发生了变化,但当我改变时间框架时,它又会采用我在属性窗口中设置的值。例如,如果在开始之前我将TradeEnable设置为EnableAll,并在程序执行期间将该值改为EnableBuy,当图表变为另一个时间框架时,该值将返回EnableAll。我在定时器事件中定义的值并通过Comment输出,不可能有错误。

enum ETradeEnable {EnableAll, EnableBuy, EnableSell, DisableAll};
extern ETradeEnable TradeEnable = EnableAll;

TradeEnable变量不受图表之间翻转的影响。阅读帮助 -与输入变量不同,外部变量的值可以在程序运行时以编程方式改变

这就是OnDeinit和OnInit的设置方式。

问题:我不明白的地方 或者改变TradeEnable是一个运行时错误?

int LastDeinitReason = 0;

void OnDeinit(const int reason)
{
    LastDeinitReason = reason;
    if(reason==REASON_CHARTCHANGE || reason==REASON_TEMPLATE || reason==REASON_PARAMETERS)
        return;
    EventKillTimer();
// далее код при завершении работы советника
}

int OnInit()
{
    if(LastDeinitReason==REASON_CHARTCHANGE || LastDeinitReason==REASON_TEMPLATE)
    {
        LastDeinitReason = 0;
        return(INIT_SUCCEEDED);
    }
    if(LastDeinitReason==REASON_PARAMETERS)
    {
        SetParams();
        return(INIT_SUCCEEDED);                              
    }
// далее код инициализации при запуске
}
 
Karputov Vladimir:
你必须连接到MetaQuotes-Demo服务器以获得最新的更新。
这并没有帮助。我甚至拆除了MT5。打开了MetaQuotes上的演示。还是1150。
 
Gennadiy Stanilevych:
这并没有什么帮助。我甚至把MT5拿下来了。打开了一个关于元引号的演示。还是1150。
仅仅在MetaQuites-Demo服务器上开设一个演示账户是不够的:你还需要连接到这个演示账户进行更新。
 
Karputov Vladimir:
仅仅在MetaQuites-Demo服务器上开设一个模拟账户是不够的:你还需要连接到这个模拟账户进行更新。

我当然连接了。然后再次重启了终端。仍然没有看到任何更新。

附加的文件:
20150826.log  7 kb
 
Gennadiy Stanilevych:

我当然连接了。然后再次重启了终端。仍然没有看到任何更新。

很奇怪(翻看了日志文件)。从经验来看--如果有更新,那么在连接后三秒内就开始下载。