错误、漏洞、问题 - 页 1981

 
A100:

这并没有真正改变什么 -- 编译错误(我有一个平板电脑 -- Borland编译器)。

嗯,所以你必须去看语言标准,看看是谁的编译器在捣乱。
 
Alexey Navoykov:
嗯,所以我们必须研究一下语言标准,看看是谁的编译器在捣乱。
第二个选择是类似的

#ifdef __BORLANDC__
class B;
class A {
        int g( B * );
        int i;
};
class B : public A {};
int A::g( B *b ) { return b->i; } //Error: E224
#endif

VS 2010失败了,因为它通过从B*到A*的隐式转换克服了私有性。


#ifdef __BORLANDC__

class B;
class A {
        int g( B * );
        int i;
};
class B : public A {};
int A::g( B *b ) { return ((A *)b)->i; } //нормально

#endif

 
Alexey Navoykov:
嗯,所以我们必须去找语言标准,看看是谁的编译器在捣乱。
gcc 7.2可以编译最新的版本,在这里检查过了
Compiler Explorer - C++
  • About the author
  • godbolt.org
These settings control how Compiler Explorer acts for you. They are not preserved as part of shared URLs, and are persisted locally using browser local storage.
 
Комбинатор:
gcc 7.2可以编译最新的版本,在这里检查过了

结果如下表所示

class B;
class A {                                       //MQL //BCC //VS2010 //gcc
        int f1( B *b ) { return       b .i;   } // -     -     +        +
        int f2( B *b ) { return       b .g(); } // +     -     +        +
        int f3( B *b ) { return ((A *)b).i;   } // +     +     +        +
        int f4( B *b ) { return ((A *)b).g(); } // +     +     +        +
        int f5()       { return       b .i;   } // -     -     +        +
        int f6()       { return       b .g(); } // +     -     +        +
        int f7()       { return ((A *)b).i;   } // +     +     +        +
        int f8()       { return ((A *)b).g(); } // +     +     +        +
//---
        int g() { return 0; }
        int i;
        B *b;
};
class B : public A {};

而msdn说:访问控制有助于防止对象被用于未经授权的目的。在进行显式类型转换(type conversions)时,这种保护就会失去。
 

大家好。

你能告诉我是否有办法在启用可视化时删除策略测试器中出现的指标窗口?

它是由MT5中的wizarda生成的。

我在MQL5文档 中看到,IndicatoRelease在Strategy Tester中不起作用。(我试图把这个函数插入OnDeinit中,但它开始抱怨说没有声明一个句柄)。我声明它,它就会产生其他错误)。

还有别的办法吗?

 
Ahmet Garyagdyyev:

大家好。

你能告诉我是否有办法在启用可视化时删除策略测试器中出现的指标窗口?

它是由MT5中的wizarda生成的。

我在MQL5文档 中看到,IndicatoRelease在Strategy Tester中不起作用。(我试图把这个函数插入OnDeinit中,但它开始抱怨说没有声明一个句柄)。我声明它,它就会产生其他错误)。

还有别的办法吗?


你可以把带有所有指标的模板改成你以前保存的任何模板。

 
A100:

结果如下表所示

长期以来,VS和gcc一直被认为是比Borland更有参考价值的*(或者至少在很大程度上不容易出现错误)。我自己用Borland很多年了,但基于它的其他优势。

PS。*这不是我的个人意见,我不会讨论它。

 

同事们,有没有人遇到过实现STL c++库的尝试(考虑到语言能力)?最好是有代码库的放置,搜索说没有,但vrdug ....当然不是全部,而是一些基本的东西:一些通过模板的正常容器,以及那个auto_ptr(我当然是自己写的,但自写这种基元是很愚蠢的)。
我不明白为什么std µl是非模板的,为什么我们不得不为STL中的方法/类的类似物发明新的名字。

 

我发现了一个错误,我不打算完全插入编译过的文本,我将从脚本中提取碎片。

class Source : public CObject
{
public:
   upindex_t start, top, lstart, ltop;
};

CArrayObj sourcear;

do
{
   Source *new_src = new Source;
   new_src.start = last.start;
   new_src.top = last.top;
   new_src.lstart = prev_prev.start;
   new_src.ltop = prev_prev.top;
   if( ! sourcear.Add(new_src) )
      return;
}
while(...);

for(int i = 0;  i < sourcear.Total();  ++ i)
{
   Source cursrc = (Source*)sourcear.At(i);  //!!!!! Это не вызывает ошибки во время компиляции
}

即:CObject*--> Source* --> Source的转换。

或者是某种棘手的MQL Specific?


ZS:而这样的字符串被吃掉了。

Source new_src = new Source;

那是胡说八道。在语言中没有复制弊端/操作者,我没有解读过它。这里发生了什么事?

 
pavlick_:

或者是某种棘手的MQL Specific?

class A {};

void OnStart()
{
  A a = new A;
}

触发了默认的复制操作符。