我似乎在一个项目中遇到问题,试图创建一个指向“this”的指针,其中“this”是C ++列表中的第一个LinkedList。第一个对象包含数据,第二个包含...等,直到this->m_next
为NULL
编译器正在向我吐口水:
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;
}
答案 0 :(得分:5)
成员函数标记为const
。这意味着this
也是const
。你需要这样做:
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>
答案 1 :(得分:1)
尝试更改
LinkedList* list = this; // this line is what the compiler is complaining about
到
LinkedList<T> const * list = this;
^^^ ^^^^^
答案 2 :(得分:1)
更改
LinkedList* list = this;
到
const LinkedList<T>* list = this;
^^^^^ ^^^
由于功能定义为const
,this
指针会自动类型为const LinkedList<T>*
因此,无法为非const
指针分配const
指针,解释错误。
如果您尝试使用非<T>
参数,丢失的int
可能会给您带来错误。