簡體   English   中英

模板類中是否可以有模板化類?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM