Полагаю, вы имеете в виду линию
parentItem->childItems.indexOf(item);
не компилируется.
Я также предполагаю, что вы написали
QList< ProjTreeItem* > childItems;
в определении типа (класса) parentItem
.
Если я правильно понимаю, в строке
parentItem->childItems.indexOf(item)
вы собираетесь конвертировать ProjTreeItem const*
в ProjTreeItem*
, и
для этого требуется const_cast
.
JaredC уже любезно ответил о константности.
Я предлагаю внимательно прочитать его ответ.
Edit:
Я думаю, что ответ Джона относится к вашему вопросу.
1-й параметр QList::indexOf
равен T const&
, где T равен ProjTreeItem*
в вашем случае.
Итак, конкретный тип параметра: ProjTreeItem*const&
.
Обратите внимание, что он отличается от ProjTreeItem const*const&
.
ProjTreeItem*
и ProjTreeItem const*
- это разные типы.
const_cast
необходимо для преобразования из последнего в первое.
ProjTreeItem const*
означает, что ProjTreeItem
равно const
.
Однако ProjTreeItem*const&
означает , указатель равен const
, ProjTreeItem
равен , а не const
.
Edit2
Вы, кажется, неправильно поняли.
#include <typeinfo>
#include <iostream>
using namespace std;
struct ProjTreeItem;
template< class T >
struct Test {
typedef T const type;
};
int main()
{
cout<< boolalpha;
cout<<
(typeid( Test< ProjTreeItem* >::type ) == typeid( ProjTreeItem const* ))
<<endl;
cout<<
(typeid( Test< ProjTreeItem* >::type ) == typeid( ProjTreeItem*const ))
<<endl;
}
Если ваша интерпретация верна, приведенный выше код напечатает true
,
а затем false
.
Однако код печатает false
, а затем true
.