提问人:WannabeArchitect 提问时间:11/11/2017 最后编辑:Remy LebeauWannabeArchitect 更新时间:11/11/2017 访问量:582
为什么 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> >;
对 '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)
根据您发布的稀疏信息,我最好的假设是您将以下行中的模板参数从 更改为:list<string>
list<int>
template class AVLTree<std::list<string>>;
此代码行显式指示编译器使用模板参数实例化 AVLTree 模板的版本。因此,当您尝试在更改后编译代码时,它会给出一条错误消息,指出它找不到该函数,因为编译器现在正在生成代码。list<string>
AVLTree::insert(string)
list<int>
您的程序包含引用 的其他代码。至少,您还必须更新该代码才能使用。AVLTree<list<string>>
list<int>
另外,如果您将问题简化为可以在此站点上发布代码的内容,那么您要么在此过程中发现问题,要么至少可以得到一个好的答案。
评论
difference between std::list<string> and std::list<int> in C++
.不同之处在于它们是不同的。std::list<string>
std::list<int>
std::string
-D_GLIBCXX_USE_CXX11_ABI=0