gpt4 book ai didi

c++ - 使用 Qt : Invalid conversion from const void* to void* while using QList

转载 作者:行者123 更新时间:2023-11-27 23:28:52 25 4
gpt4 key购买 nike

我一直在搞 Qt 和 C++ 有一段时间了,但我遇到了这个错误,而且似乎无法弄清楚为什么会突然出现。 const void* 转换错误消息已经回答了很多其他问题,但我真的看不出这些解释对我的情况有何帮助,所以这里是:

我有一个 QList 的重新实现“MyTypeManager”,所以一个指向非 const MyType 的 const 指针列表。但是,当我重新实现一个函数时,addMyType 被调用

void MyTypeManager::addMyType(MyType *const var)
{
this->append(var);
}

出现以下错误:

In file included from /usr/include/qt4/QtCore/QList:1:0,
from ../qtsdlthread/mytypemanager.h:4,
from ../qtsdlthread/mytypemanager.cpp:1:
/usr/include/qt4/QtCore/qlist.h: In member function ‘void QList<T>::node_construct(QList<T>::Node*, const T&) [with T = MyType* const]’:
/usr/include/qt4/QtCore/qlist.h:499:13: instantiated from ‘void QList<T>::append(const T&) [with T = MyType* const]’
../qtsdlthread/mytypemanager.cpp:20:26: instantiated from here
/usr/include/qt4/QtCore/qlist.h:359:58: error: invalid conversion from ‘const void*’ to ‘void*’
/usr/include/qt4/QtCore/qlist.h: In member function ‘void QList<T>::node_copy(QList<T>::Node*, QList<T>::Node*, QList<T>::Node*) [with T = MyType* const]’:
/usr/include/qt4/QtCore/qlist.h:666:9: instantiated from ‘QList<T>::Node* QList<T>::detach_helper_grow(int, int) [with T = MyType* const]’
/usr/include/qt4/QtCore/qlist.h:497:48: instantiated from ‘void QList<T>::append(const T&) [with T = MyType* const]’
../qtsdlthread/mytypemanager.cpp:20:26: instantiated from here
/usr/include/qt4/QtCore/qlist.h:386:17: error: invalid conversion from ‘const void*’ to ‘void*’

mytypemanager 中的 20:26 是上面发布的 this->append 行。

最佳答案

来自documentation :

QList's value type must be an assignable data type.

MyType *const 是不可赋值的。您有几种补救措施:

1。使 T 成为可变指针

2。使 T 成为指向您的 const 指针的指针:

typedef MyType *const Element

void MyTypeManager::addMyType(Element var)
{
Element* ptr2ptr = new Element(var);
this->append(ptr2ptr);
}

但现在您需要担心 2 级内存管理。

3。 (危险)将 T=MyType* 和 const-cast MyType *const 转换为 MyType *:

this->append(const_cast<MyType *>(var));

只有当您确定 var 最初是作为 MyType* 变量创建时,这才会起作用。

关于c++ - 使用 Qt : Invalid conversion from const void* to void* while using QList<Type *const>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com