任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 156 1...149150151152153154155156157158159160161162163...1178 新评论 Sergey Dzyublik 2013.09.19 23:18 #1551 1) 为什么不在声明int err=0 时立即初始化? 2) 没有检查,但根据文档,err被存储在某个变量中,当使用GetLastError() 函数时,该变量被自动清零。 而且在使用某些函数(主要是终端函数)时也总是发生变化 3)这就是为什么GetLastError() 在OrderSelect 中引用了一个不存在的票号后给出了一个0的值 。 " 其他函数在任何条件下都不会改变last_error变量的值。.................,OrderSelect, ...................." Paladin80 2013.09.20 06:05 #1552 hoz:通常我在函数中会这样声明一个变量。再往里走,在某个条件下,我已经调用它,看看是否有错误。好吧,不仅是我,我遇到的许多其他地方的代码。所以说,这是一个典型的情况。我今天想,在你想控制错误的每个函数中,每次都声明相同的变量,这是不符合逻辑的。我想了想,得出的结论是,在全局范围内声明一次,然后在init中初始化它,这样更容易。它是这样的。还有,当你需要在用户函数中调用err变量时,知道它已经有一个值。事实上,GetLastError() 输出的是最后一个错误的代码,所以如果在所有计算结束时,在每个函数中调用这个变量err,负责输出错误代码,并调用GetLastError(),那么一切都会正确,对吗?但如果你不在某个函数的末尾调用这个变量(跟随代码的执行链),它就不会被重置,而且可能会出现错误的执行,万一在之前的执行中出现了错误,但在当前的执行中没有,但错误代码最后被返回......而要重置它,你需要调用这个函数GetLastError()。也就是说,这里的一切都取决于它是否被调用。如果你不确定它将无处不在,那么每次都重新保险和重置就更容易了,对吗? 你可以全局声明它,然后在调用GetLastError() 之前在start()中重置它,例如 int err; //------------------ int init() { // ... return(0); } //------------------ int start() { // ... RefreshRates(); OrderClose(...); err=0; // обнуление err=GetLastError(); SomeErrFunction(err); // ... return(0); } Viktar Dzemikhau 2013.09.20 07:12 #1553 ALXIMIKS: 1) 为什么不在声明int err=0 时立即初始化? 试试吧!:)这对我来说并不奏效。根据我的理解,在全局变量中通过特殊函数进行初始化是不允许的。尽管文件中似乎没有提到这一点。 ALXIMIKS。 2) 没有检查,但根据文档,err被存储在某个变量中,当使用GetLastError() 函数时,该变量被自动清零。 而且在使用某些函数(主要是终端函数)时也总是发生变化 关于归零,上面写了,但在这里,如果数值进入LastError 变量后(), 那么为了重置它,我们需要调用GetLastError 函数() 来返回最后一个错误的代码,并重置LastError 变量 。否则,最后一个错误的代码将被永久保存,直到你调用GetLastError(),因此,它可能会在不存在的地方返回最后一个错误的代码。(即在另一个函数中,使其更难读出日志或打印)。 ALXIMIKS。3)这就是为什么GetLastError() 在OrderSelect 中引用了一个不存在的票号后给出了一个0的值 。 " 其他函数在任何条件下都不会改变last_error变量的值。.................,OrderSelect, ...................." 这 很可能 不是因为OrderSelect() ,而是其他方面出了问题(在同一个函数的旁边)。 特别是它经常受到许多其他事情的影响。 Viktar Dzemikhau 2013.09.20 07:19 #1554 paladin80:你可以全局声明err,然后在调用GetLastError()之前在start()中把它归零,例如 如果你一开始就声明,然后在代码中出现1个以上的错误,那么逻辑就已经出错了。除非GetLastError() 被不断调用(理论上在每个用户函数的末尾)。 Victor Nikolaev 2013.09.20 07:23 #1555 hoz: 那么就已经有了一个逻辑上的问题。除非GetLastError() 被不断调用(理论上 在每个用户函数的末尾)。 有时你必须更频繁地调用它 Vadim Zhunko 2013.09.20 08:56 #1556 Victor(霍兹),我不理解你对最后一个错误 的大惊小怪。 声明用于错误处理的函数,并在需要时调用它。所有东西都将是本地的,可以在各地使用。 // Объявление: void CommentError(int nLastCodeError, string sComment) { if (nLastCodeError != 0) Print(sComment, " ", ErrorDescription(nLastCodeError)); } // Вызов: void start() { CommentError(GetLastError(), "Ошибка в функции start()!"); } Viktar Dzemikhau 2013.09.20 09:41 #1557 Zhunko:Victor(霍兹),我不理解你对最后一个错误的大惊小怪。声明用于错误处理的函数,并在需要时调用它。所有东西都将是本地的,可以在各地使用。 这是可以理解的。但这个函数将在我需要时被调用,即当我想检查是否有错误时。但如果之前某处有错误,而此刻没有错误,就会返回之前的错误......因为在你的函数Vadim中,LastError 变量没有被清零, 通过调用GetLastError()。事情是这样的... Vadim Zhunko 2013.09.20 09:45 #1558 hoz: 这是可以理解的。但这个函数将在我需要的时候被调用,也就是说,当我想检查是否有错误的时候。但是,如果先前某个地方出现了错误,而此刻没有错误,它将返回先前的错误......因为在你的函数Vadim中,LastError 变量没有被清零, 通过调用GetLastError()。这就是问题的关键...它不应该被重置为零。应该有一种习惯,在函数之后到处检查错误。你也应该让电话失去作用。这样它在战斗模式下就不会变慢。也就是说,它是这样一个调试器。 当然,例外的是需要分析的错误,以做出决定。 Paladin80 2013.09.20 10:41 #1559 hoz: 这是可以理解的。但这个函数将在我需要时被调用,即当我想检查是否有错误时。但如果之前某处有错误,而此刻没有错误,就会返回之前的错误......因为在你的函数Vadim中,LastError 变量没有被清零, 通过调用GetLastError()。重点来了... 是什么阻止了它先归零(err=0;),然后调用动作,然后赋值 err=GetLastError(),处理它,然后err=0再次。 smart 2013.09.20 10:42 #1560 如何计算不同t/p和s/l的利润系数。很明显,如果取值和止损各为20点,让我们计算一下盈利和亏损的交易数量并将其划分。如果我采取40点的TP和30点的止损,我如何计算? 我们将以同样的方式使用它,在同样的地方使用它。 1...149150151152153154155156157158159160161162163...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
1) 为什么不在声明int err=0 时立即初始化?
2) 没有检查,但根据文档,err被存储在某个变量中,当使用GetLastError() 函数时,该变量被自动清零。
而且在使用某些函数(主要是终端函数)时也总是发生变化
3)这就是为什么GetLastError() 在OrderSelect 中引用了一个不存在的票号后给出了一个0的值 。
" 其他函数在任何条件下都不会改变last_error变量的值。.................,OrderSelect, ...................."
通常我在函数中会这样声明一个变量。
再往里走,在某个条件下,我已经调用它,看看是否有错误。好吧,不仅是我,我遇到的许多其他地方的代码。所以说,这是一个典型的情况。我今天想,在你想控制错误的每个函数中,每次都声明相同的变量,这是不符合逻辑的。我想了想,得出的结论是,在全局范围内声明一次,然后在init中初始化它,这样更容易。它是这样的。
还有,当你需要在用户函数中调用err变量时,知道它已经有一个值。事实上,GetLastError() 输出的是最后一个错误的代码,所以如果在所有计算结束时,在每个函数中调用这个变量err,负责输出错误代码,并调用GetLastError(),那么一切都会正确,对吗?
但如果你不在某个函数的末尾调用这个变量(跟随代码的执行链),它就不会被重置,而且可能会出现错误的执行,万一在之前的执行中出现了错误,但在当前的执行中没有,但错误代码最后被返回......而要重置它,你需要调用这个函数GetLastError()。也就是说,这里的一切都取决于它是否被调用。如果你不确定它将无处不在,那么每次都重新保险和重置就更容易了,对吗?
你可以全局声明它,然后在调用GetLastError() 之前在start()中重置它,例如
1) 为什么不在声明int err=0 时立即初始化?
2) 没有检查,但根据文档,err被存储在某个变量中,当使用GetLastError() 函数时,该变量被自动清零。
而且在使用某些函数(主要是终端函数)时也总是发生变化
3)这就是为什么GetLastError() 在OrderSelect 中引用了一个不存在的票号后给出了一个0的值 。
" 其他函数在任何条件下都不会改变last_error变量的值。.................,OrderSelect, ...................."
你可以全局声明err,然后在调用GetLastError()之前在start()中把它归零,例如
那么就已经有了一个逻辑上的问题。除非GetLastError() 被不断调用(理论上 在每个用户函数的末尾)。
有时你必须更频繁地调用它
Victor(霍兹),我不理解你对最后一个错误 的大惊小怪。
声明用于错误处理的函数,并在需要时调用它。所有东西都将是本地的,可以在各地使用。
Victor(霍兹),我不理解你对最后一个错误的大惊小怪。
声明用于错误处理的函数,并在需要时调用它。所有东西都将是本地的,可以在各地使用。
这是可以理解的。但这个函数将在我需要时被调用,即当我想检查是否有错误时。但如果之前某处有错误,而此刻没有错误,就会返回之前的错误......因为在你的函数Vadim中,LastError 变量没有被清零, 通过调用GetLastError()。事情是这样的...
这是可以理解的。但这个函数将在我需要的时候被调用,也就是说,当我想检查是否有错误的时候。但是,如果先前某个地方出现了错误,而此刻没有错误,它将返回先前的错误......因为在你的函数Vadim中,LastError 变量没有被清零, 通过调用GetLastError()。这就是问题的关键...
它不应该被重置为零。应该有一种习惯,在函数之后到处检查错误。你也应该让电话失去作用。这样它在战斗模式下就不会变慢。也就是说,它是这样一个调试器。
当然,例外的是需要分析的错误,以做出决定。
这是可以理解的。但这个函数将在我需要时被调用,即当我想检查是否有错误时。但如果之前某处有错误,而此刻没有错误,就会返回之前的错误......因为在你的函数Vadim中,LastError 变量没有被清零, 通过调用GetLastError()。重点来了...