1. ホーム
  2. c++

[解決済み] コンパイラー "error: 'const something' を 'this' 引数に渡すと修飾子が破棄される"

2022-02-02 17:23:41

質問

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; }

解決方法は?

を作成する必要があります。 length をconst-qualifiedにする。

int length(){ return m_count; }

int length() const { return m_count; }