[英]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.