我正在使用C ++中的模板制作自定义列表并获得一些编译错误 代码的长度非常大,因此这里有一小段代码来自错误。编译错误如下。您可以将其编译为您自己的系统以查看相同的错误。
#include <iostream>
using namespace std;
template <class T>
class sortedList
{
int m_count;
public:
sortedList(){m_count = 0;}
int length(){ return m_count; }
};
void output(const sortedList<int>& list)
{
cout << "length" << list.length() << endl;
return;
}
int main() {
// your code goes here
sortedList <int> list1;
output(list1);
return 0;
}
我收到编译错误:
prog.cpp: In function ‘void output(const sortedList<int>&)’:
prog.cpp:17:35: error: passing ‘const sortedList<int>’ as ‘this’ argument discards qualifiers [-fpermissive]
cout << "length" << list.length() << endl;
^
prog.cpp:10:6: note: in call to ‘int sortedList<T>::length() [with T = int]’
int length(){ return m_count; }
答案 0 :(得分:8)
你必须使length
成为const限定的:
int length(){ return m_count; }
→
int length() const { return m_count; }
答案 1 :(得分:1)
length
具有常量限定性。output
函数中使用 const_cast。sortedList<int>& ref = const_cast <sortedList<int>&>(list);
cout << "length" << ref.length() << endl;
(2) 在我们没有时间更新 (1) 中提到的类方法时特别有用。