为什么 std::list<string> 有效但 std::list<int> 无效

Why does std::list<string> work but not std::list<int>

我在 Ubuntu 上实现 AVL 树时使用模板。

当我写 template class AVLTree<std::list<int> >; 时文件不会编译,它告诉我:

undefined reference to `AVLTree < std::__cxx11::list < std::__cxx11::basic_string < char, std::char_traits < char>, std::allocator < char> >, std::allocator < std::__cxx11::basic_string < char, std::char_traits < char>, std::allocator < char> > > > >::insert(std::__cxx11::basic_string < char, std::char_traits < char>, std::allocator < char> >)'

我不明白它没有提到什么。

但是当我写 template class AVLTree<std::list<string> >;

时它编译得很好

我需要让 AVLTree 存储存储字符串值的链表。

为什么一个能编译而另一个不能?如何解决我的问题?

PS:我包含了 <list><string><iostream>,以及我自己的头文件。

仔细检查错误消息表明链接器无法找到 AVLTree::insert(string) 方法。

根据您 post 编辑的稀疏信息,我最好的假设是您将以下行中的模板参数从 list<string> 更改为 list<int>:

template class AVLTree<std::list<string>>;

这行代码明确告诉编译器使用list<string>作为模板参数来实例化AVLTree模板的一个版本。因此,当您尝试在更改后编译代码时,它会提示您无法找到 AVLTree::insert(string) 函数的错误消息,因为编译器现在正在为 list<int> 生成代码。

您的程序包含引用 AVLTree<list<string>> 的其他代码。您至少必须更新该代码才能使用 list<int>

此外,如果您将问题简化为您可以 post 本网站上的代码,那么您将在该过程中找到问题,或者至少会得到一个好的答案.