编译器"错误:将'const something'传递为'this'参数会丢弃限定符"

时间:2017-10-11 05:40:46

标签: c++

我正在使用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; }

2 个答案:

答案 0 :(得分:8)

你必须使length成为const限定的:

int length(){ return m_count; }

int length() const { return m_count; }

答案 1 :(得分:1)

  1. 如前所述,一种选择是使 length 具有常量限定性。
  2. 另一种选择是在 output 函数中使用 const_cast。
<块引用>
sortedList<int>& ref = const_cast <sortedList<int>&>(list);
cout << "length" << ref.length() << endl;

(2) 在我们没有时间更新 (1) 中提到的类方法时特别有用。