繁体   English   中英

模板化类无法采用其他模板化类

[英]Templated class fails taking other templated class

我有一个模板类,该模板类在构造函数中将对该模板的引用作为单个参数。 直到template参数成为也已模板化的类,这才能正常工作。 编译器(VS 2008)给了我几个错误,但是我找不到解决方法...

编辑这是从实际来源:

PerlinNoise<> per;
RawPainter< PerlinNoise<> > pat(per);
TextureGenerator<RawPainter<PerlinNoise<> > genn(pat);

其中PerlinNoise具有默认模板参数,而RawPainter和TextureGenerator都在构造函数中采用了引用(来自T类型)

那么,我该如何做呢? 它可能是某个地方的简单额外类型名称,但我似乎无法弄清楚。

谢谢

 int pod = 5;
 B<int> myB(pod); //OK

这可行。 B<int>需要int&进行构造。 由于pod是一个int类型,因此可以轻松地将其转换为正确的类型。

A<int> myA;
B< A< A<int> > > myB2(myA); //COMPILE ERROR

好吧,这行不通。 B< A< A< int > > >的构造函数需要A< A< int > >然后将其传递给A< int > 没有可用的转换,因此没有办法将正确的类型传递给构造函数。

您的编译器应该已经向您解释了这一点。 我的做了:

error: no matching function for call to B<A<A<int> > >::B(A<int>&)
note: candidates are:
note: B<T>::B(T&) [with T = A<A<int> >]
note:   no known conversion for argument 1 from A<int> to A<A<int> >&
note: B<A<A<int> > >::B(const B<A<A<int> > >&)
note:   no known conversion for argument 1 from A<int> to const B<A<A<int> > >&

这是赠品: no known conversion for argument 1 from A<int> to A<A<int> >& 最后一行告诉您,编译器还尝试使用隐式副本构造函数,但是也失败了。

将正确的引用传递给构造函数:

A<A<int> > myAA;
B< A< A<int> > > myB3(myAA); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM