簡體   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