为什么 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 本网站上的代码,那么您将在该过程中找到问题,或者至少会得到一个好的答案.
我在 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 本网站上的代码,那么您将在该过程中找到问题,或者至少会得到一个好的答案.