错误、漏洞、问题 - 页 1749

 
fxsaber:
我在kodobase中做了一个tick指标。但我无法附加来源--我按下 "附加文件",铭文消失,但选择文件的界面没有出现。
也许安装了广告屏蔽,可以阻止所有的弹出窗口
 
Vladislav Andruschenko:
也许安装了广告屏蔽,可以阻止所有的弹出式广告

我没有改变任何东西。之前一切都在工作。

结账时,我按下这个按钮

没有任何东西回来,除了这个。

 
Sergei Vladimirov:
是的,我明白你的问题。有一个函数有更合适的签名,但它不能被调用,因为它被保护了。是的,其行为与Studio不同:在MKL中,有更严格的类型控制(在这种情况下)。我不知道这是否应该被认为是一个错误。如果你控制传递给函数的参数的类型,就不会有问题。

控制是相当有选择性的,因此更不一致,这从这里可以看出

class A {
public:
        void f( int ) const {} /*(1)*/        
        void f( int )       {} /*(2)*/
};
class B : public A {
public:
        void f( int ) const {} /*(3)*/
};
void OnStart()
{
        B b; //не const B
        b.f( 0 ); //(*)

}
在这里,在(*)总的来说(考虑到不是const B b ),调用A::f/*(2)*/更可能是

但是C++总是不分析基类是否有更合适的方法,如果派生类正好有一个合适的方法。

而MQL--在上一个例子中,它分析了基类中更合适的方法,而在这个例子中,它没有分析(这里和C++一样会调用B::f/*(3)*/),这意味着没有统一的方法

另一个控制不一致的例子:C++发现以下代码

class A { public:
        void f(  int i ) const {}
        void f( uint i )       {}
};
void OnStart()
{
        A a;
        a.f((int)0 );
}
错误的,而MQL是好的
 
A100:

控制是相当有选择性的,因此更不一致,这从这里可以看出

class A {
public:
        void f( int ) const {} /*(1)*/        
        void f( int )       {} /*(2)*/
};
class B : public A {
public:
        void f( int ) const {} /*(3)*/
};
void OnStart()
{
        B b; //не const B
        b.f( 0 ); //(*)

}
在这里,在(*)中,总的来说(考虑到不是const B b ),调用A::f/*(2)*/是比较

但是C++总是不分析基类是否有更合适的方法,如果派生类正好有一个合适的方法。

而MQL--在上一个例子中,它分析了基类中更合适的方法,而在这个例子中,它没有分析(这里和C++一样会调用B::f/*(3)*/),这意味着没有统一的方法

另一个控制不一致的例子:C++发现以下代码

class A { public:
        void f(  int i ) const {}
        void f( uint i )       {}
};
void OnStart()
{
        A a;
        a.f((int)0 );
}
有问题,而MQL是好的
你的C++编译器是什么? 我有gcc,一切运行都没有错误。
 
coderex:
你用什么C++编译器? 我用gcc,一切都通过了,没有任何错误。
那么gcc最后会调用什么函数呢?
class A { public:
        void f(          int i ) const {} //1
        void f( unsigned int i )       {} //2
};
void OnStart()
{
        A a;
        a.f((int)0 );
}

(1)或(2)。现在我将插入编译器的信息

这其实是一种严格的控制:一种方法在签名方面更适合,另一种在一致性方面更适合。

 
A100:

这实际上是一种严格的控制:一种方法通过签名更适合,另一种方法通过恒定性更适合。

那么,如果你让const A成为;,那么(1)就应该被调用。如果没有,则由编译器决定。也就是说,不可能有唯一性。而且也不清楚为什么要写这样的代码。
 
fxsaber:
而且也不清楚你为什么要写这样的东西。

替换f->运算符[],以你最近的例子为例--想想如何让[]既是左边又是右边。添加恒定的味道 - 然后用模板包装,你就有了类似的东西。

如果做出决定--考虑没有如果

如果不能明确,你至少应该发出一个警告

 
A100:
替换f->运算符[],以你最近的例子为例--想想如何让[]既是左边又是右边。加入恒定的味道--然后用模板包装,你就会有类似的东西。
我们谈论的是哪个例子?你能不能不给出来源,而是给出最终的条目,这应该是可行的?
 
fxsaber:
我们谈论的是哪个例子?你能不能不给出来源,而是给出最终的条目,这应该是可行的?

你最终应该得到这样的结果

void OnStart()
{
        A<int> a;
        int b  = a[ 0 ];
        a[ 0 ] = a[ 1 ];
        a[ 1 ] = b;
}
 
A100:

你最终应该得到这样的结果

void OnStart()
{
        A<int> a;
        int b  = a[ 0 ];
        a[ 0 ] = a[ 1 ];
        a[ 1 ] = b;
}
指数是恒定的吗?