考虑一个我创建的模板化类myList
,它基本上扩展了C ++ STL中提供的std::list
对象。我已覆盖了一些功能,例如size()
,front()
和back()
,但未触及sort()
提供的std::list
函数。
基本上,我希望能够对myList
进行排序,考虑我的装饰器实现:
#import "myList.h"
template <typename T>
class myListDecorator : public myList<T> {
public:
myListDecorator() : m_list(myList<T>()){}
myListDecorator(const myList<T> &my_list) {
m_list = my_list.sort();
}
private:
myList<T> m_list;
};
每当我创建myList
(在这种情况下使用double
类型的对象)时,我会收到以下错误:
Candidate function not viable: no known conversion from 'const myList<double>' to 'std::list<double, std::allocator<double>>' for object argument
。
我是否必须覆盖sort()
中的myList
函数并实现我自己的排序才能生效?
修改
其中一些评论指出,在这个类中有效地拥有两个myList
对象是多么令人困惑。我已将我的代码更新为更“正确”/“最佳实践”。它现在做了我打算做的事情并且更加整洁:
#include "myList.h"
template <typename T>
class myListDecorator : public myList<T> {
public:
myListDecorator() : myList<T>(myList<T>()){}
myListDecorator(const myList<T> &my_list) : myList<T>(my_list){
this->sort();
}
};
答案 0 :(得分:2)
您的my_list
是const
。 sort()
成员函数修改了列表,并且不能使用常量列表。 (请注意,sort()
的返回类型为void
。)
你应该能够:
myListDecorator(const myList<T> &my_list): m_list(my_list) {
m_list.sort();
}
答案 1 :(得分:0)
原因是您正在尝试将const myList转换为非const类型。 BTW,&#39; #import&#39;不是标准的C / C ++预处理器语句。