0

「this」がC++のリストの最初のLinkedListである「this」へのポインターを作成しようとしているプロジェクトで問題が発生しているようです。最初のオブジェクトにはデータが含まれており、2 番目のオブジェクトにはデータが含まれていますthis->m_nextNULL

コンパイラは私にこれを吐き出しています:

linkedlist.hpp:55:22: error: invalid conversion from âconst LinkedList<int>* constâ to âLinkedList<int>*â [-fpermissive]

私は何を間違っていますか?

template <typename T>  
int LinkedList<T>::size() const
{
  int count = 0;
  LinkedList* list = this; // this line is what the compiler is complaining about

  //adds to the counter if there is another object in list
  while(list->m_next != NULL)
  {
    count++;
    list = list->m_next;
  }
  return count;
}
4

3 に答える 3

5

メンバー関数は とマークされていconstます。つまり、それthisconst同様です。あなたがする必要があります:

const LinkedList<T>* list = this; // since "this" is const, list should be too
//               ^
//               |
//               Also added the template parameter, which you need, since "this"
//               is a LinkedList<T>
于 2013-02-22T01:52:29.470 に答える
1

変更してみる

LinkedList* list = this; // this line is what the compiler is complaining about

LinkedList<T> const * list = this; 
          ^^^ ^^^^^   
于 2013-02-22T01:51:52.810 に答える
1

変化する

LinkedList* list = this; 

const LinkedList<T>* list = this; 
^^^^^           ^^^ 

あなたの関数は として定義されているconstので、thisポインタは自動的const LinkedList<T>*

したがって、ポインターを非ポインターに割り当てることはできずconstconst、エラーが説明されます。

非パラメータを試すと、欠落<T>によりエラーが発生する可能性があります。int

于 2013-02-22T01:52:41.553 に答える