为什么 std::list<string> 有效,但 std::list<int 不起作用>

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

提问人:WannabeArchitect 提问时间:11/11/2017 最后编辑:Remy LebeauWannabeArchitect 更新时间:11/11/2017 访问量:582

问:

我在 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>

C++ 器错误编译 未定义引用

评论

0赞 DimChtz 11/11/2017
difference between std::list<string> and std::list<int> in C++.不同之处在于它们是不同的。
2赞 Raymond Chen 11/11/2017
@DimChtz 这个问题措辞不当。它应该是“为什么有效但不起作用?std::list<string>std::list<int>
0赞 Some programmer dude 11/11/2017
除了它们是不同的类型之外,如果没有最小、完整和可验证的示例,就无法猜测导致错误的问题。请阅读如何提出好问题
0赞 WannabeArchitect 11/11/2017
@RaymondChen 谢谢。我更改了我的头衔。
1赞 Jonathan Wakely 11/11/2017
您的问题没有足够的信息在这里成为有效的问题。无论如何,您正在将使用 不同定义 构建的代码片段链接在一起。编译,以便您始终获得旧版本。std::string-D_GLIBCXX_USE_CXX11_ABI=0

答:

1赞 RandomBits 11/11/2017 #1

仔细检查错误消息表明链接器找不到该方法。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>

另外,如果您将问题简化为可以在此站点上发布代码的内容,那么您要么在此过程中发现问题,要么至少可以得到一个好的答案。

评论

0赞 WannabeArchitect 11/11/2017
谢谢。我从来没有意识到我实际上是在测试代码的某个地方声明 AVLTree<list<string>>。