错误、漏洞、问题 - 页 2330

 
Ilyas:

我已经大致弄清了原因。我有一个全局变量

CArrayObj actobjects;

与mcl环境和任务的初始化顺序有关,显然,如果actobjects一个指针,自己在那里放一个数组,没有什么崩溃。全局变量中的类--不好的做法,当然,我会重写。但在函数中的静态数组会出现问题(在μl中,规则--在第一次进入函数时初始化不起作用)。

一般来说,如果它算作是一个bug,那么在知道了大概的原因后,我大概可以把它定位。

 
pavlick_:

无论如何,如果它算作一个bug,知道了大致的原因,我想我可以把它定位。

不,抓不到,剪掉代码后奇迹般地消失了。甚至注释掉一些行(在崩溃前不执行)也会影响它。

 

有一个长的代码类,它位于mqh。我们需要创建完全相同的类,它与原来的类只有两行不同(不是少符号,而是多符号)。

能否在不创建另一个几乎相同的mqh的情况下做到这一点?


当班级很短时,你可以很容易地用多行宏来做,一切都很容易出来。但这里的代码很长。

我不想创建一个mqh-clone,因为如果我修复一个mqh,我将不得不在第二个mqh中重复我的所有操作。此外,还有遗忘和不注意的人为因素。


你仍然可以用一个模板类来做。但是,这对执行速度的影响一点也不明显。快速运行时需要这个班。

 
fxsaber:
#ifdef
 
TheXpert:
#ifdef

这是不可能的。两个班级都必须在运作。

 
fxsaber:

这是不可能的。这两个班级都应该在运作。

我不觉得有什么问题。

_____________

遗产

把差异放在不同的小班里

 
TheXpert:

我不觉得有什么问题。

_____________

遗产

把差异放在单独的小班里

一个类中有几个规模不小的方法。在每一种方法中,你只需要把">"号换成"<"号。

你可以使用像这样的虚拟
class A
{
private:
  virtual bool Compare()
  {
    return(true);
  }
public:

  bool f()
  {
    return(this.Compare());
  }
};

class B : public A
{
private:
  virtual bool Compare()
  {
    return(false);
  }
};


void OnStart()
{
  A a;
  B b;
  
  Print(a.f());
  Print(b.f());
}


但是,不幸的是,我们仍然需要传递类的初始化值。所以我想我们终究还是要使用一个模板。

 
fxsaber:

我会通过模板参数传递一些适配器(不应该有任何刹车),但如果你想这么笨拙,你也可以。做一个到头文件的硬链接(mklink /H <link> <target>,如果我没记错的话。你可以用谷歌搜索 "windows创建硬链接")。然后以通常的方式启用这些东西

#define _N C1    // имя класса
#define _M "c1"  // какой-то параметр
#include <qq.mqh>
#undef _N
#undef _M
#define _N C2
#define _M "c2"
#include <ee.mqh> // жёсткая ссылка на qq.mqh
#undef _N
#undef _M
 
pavlick_:

我会通过模板参数传递一些适配器(不应该有任何刹车),但如果你想这么笨拙,你也可以。做一个到头文件的硬链接(mklink /H <link> <target>,如果我没记错的话。你可以用谷歌搜索 "windows创建硬链接")。然后你只需按照通常的方式将其插入。

你错过了重点。

 
fxsaber:

你不明白这个问题。

好吧,我不知道,你确定你明白我的意思吗? 万一列出的是qq.mqh和ee.mqh(一个实体,改变一个就改变另一个)。

class _N
{
public:
   void f() {Alert(_M);}
};

都是按顺序排列的,类别不在macros,几乎一样,除了_M。