错误、漏洞、问题 - 页 1570

 

需要细化模板(在A类{}之外采取实现)。

template<typename T>
class A { public:
template<typename T2>
        void f1( T2 t2 );
template<typename T2>
        void f2( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); }
template<typename T2>
        void f3( T2 t2, T tt );
        T t;
};
template<typename T>
template<typename T2>
void A::f1( T2 t2 )       { Print( __FUNCSIG__, " ", typename( this.t ) ); } //нормально
template<typename T>
template<typename T2>
void A::f3( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); } // error: 'T' - declaration without type

我不能在A {}类之外实现A::f3。

但在A类{}里面,你可以。是的,你可以...例如,f2(),但不便之处在于在A {}类之外采取繁琐的函数的目的。最主要的是,A::f1()可以被带入类A {}内,并且一切正常,而A::f3()却不能--编译器产生了错误。

 
不,那是一个婊子,顺便说一句,一个类型化的定义应该能解决这个问题
 
A100:

需要细化模板(在A类{}之外采取实现)。

我不能在A {}类之外实现A::f3。

但在A类{}里面,你可以。是的,你可以...例如,f2(),但不便之处在于在A {}类之外采取繁琐的函数的目的。最主要的是,A::f1()可以被带到A {}类之外,并且一切正常,而A::f3()不能--编译器会产生一个错误,因为A::f1()和A::f3()原则上没有任何区别。

这就是它的正常编译方式。

template<typename T>
class A { public:
template<typename T2>
        void f1( T2 t2 );
template<typename T2,typename T>
        void f2( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); }
template<typename T2,typename T>
        void f3( T2 t2, T tt );
        T t;
};
template<typename T2>
void A::f1( T2 t2 )       { Print( __FUNCSIG__, " ", typename( this.t ) ); } //?????????
template<typename T2,typename T>
void A::f3( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); } //error: 'T' - declaration without type

而f1和f3则有些不同

 
Andrey Barinov:

这就是它的正常编译方式。

不是的--编译器只是假设没有OnStart--没有问题。

增加

void OnStart()
{
        A<long> a;
}
 

编译错误: 内部错误#9

附加的文件:
Test114.mq5  3 kb
 

如果你改变了几行,错误就变成了:树形优化错误

但最初(简化前)的错误是:代码生成错误

一切都在这里结束了--但在这之前,一切都运作良好。

附加的文件:
Test115.mq5  3 kb
 
A100:

在一个档案库中制作大量不同的苗条来源。这样,开发人员就可以在他们要推出另一个有问题的构建之前使用它。

将档案称为 "虱子测试"。当然,不同种类的编译器都有这样的测试变体。

 
编译错误: 代码生成错误
附加的文件:
Test116.mq5  2 kb
 


由于标准值计算不正确,优化图表 停止绘制。 请修复它,因为在图表上观察优化过程非常方便。

只出现在平衡+最大射频 标准上。// 至少在我的(迄今为止的小规模)实践中是这样。

//只有图形断裂,优化成功。

----------- UPD

Проявляется только на критерии Balance + max RF.

我错了。


 

&和GetPointer 的不同行为

class A {};
class B {
        A *f() const { return GetPointer( a ); } //не генерирует ошибки
        A *g() const { return &a; }              //ошибка: 'return' - cannot convert from const pointer to nonconst pointer
        A a;
};