我一直在寻找这里发布的一些问题,但我仍然找不到这个代码的问题:
template <typename ItemType>
class List
{
public:
List();
private:
template <typename ItemType>
struct Node
{
ItemType m_value;
int m_count;
Node* m_next;
Node* m_prev;
};
Node* m_head;
int m_uniqueSize;
int m_size;
Node* find(const ItemType& value) const;
};
然后在cpp文件中,我声明了这样的find函数:
template <typename ItemType>
typename Multiset<ItemType>::Node* Multiset<ItemType>::find(const ItemType& value) const
{
//linear search code in here
}
我的代码有什么问题吗? THX
答案 0 :(得分:2)
问题是您在.cpp
文件中插入模板实现代码:所有模板代码必须位于 header 文件中(您可能希望将接口代码放在{{1}中文件和实现代码在MyClass.h
文件中,但两者都必须是头文件。)
此外,您在“.cpp”代码中写了MyClass-inl.h
,但我认为您应该使用Multiset
代替List
,根据您的第一个“标题”代码(名称)该班级是Multiset
)。
答案 1 :(得分:0)
为了进一步详细说明模板的原因,请考虑在编译时对它们进行评估。因此,在链接器启动之前必须知道它们的类型,类似于内联函数,typedef等。