![](/img/trans.png)
[英]Is it possible to have a templated constructor like 'template<class T> X(){}'?
[英]is it possible to have templated classes within a template class?
template <class M, class A> class C { std::list<M> m_List; ... }
上面的代碼可能嗎? 我希望能夠做類似的事情。
我為什么要問我得到以下錯誤:
Error 1 error C2079: 'std::_List_nod<_Ty,_Alloc>::_Node::_Myval' uses undefined class 'M' C:\Program Files\Microsoft Visual Studio 9.0\VC\include\list 41
我的猜測:您將聲明的類M轉發到某個地方,並且僅在模板實例化之后完全聲明它。
我的提示:為您的正式模板參數提供與實際名稱不同的名稱。 (即M類)
// template definition file
#include <list>
template< class aM, class aT >
class C {
std::list<M> m_List;
...
};
錯誤的前向聲明的示例,導致上述錯誤:
// bad template usage file causing the aforementioned error
class M;
...
C<M,OtherClass> c; // this would result in your error
class M { double data; };
正確聲明的示例,不導致錯誤:
// better template usage file
class M { double data; }; // or #include the class header
...
C<M,OtherClass> c; // this would have to compile
是。 這是很常見的。
如xtofl所述,在模板實例化時,參數的前向聲明會導致問題,這看起來像錯誤消息所暗示的那樣。
這是非常常見的用法。
您應該確保在創建類C的第一個實例之前完全聲明了指定為模板參數的類M。也許您缺少頭文件include,或者這是名稱空間問題。
是。
STL在分配器和迭代器之類的東西上經常使用它。
看來您遇到了其他問題。 也許您遺漏了最初在...中聲明的脫機方法主體定義上的模板?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.