在 QMap 中插入 QObject * - 无法初始化或传递指针
Inserting QObject * in QMap - cannot initialize or pass the pointer
我设置了两个 类,InputFile
和 InputStream
。两者都继承QObject
,并用Q_OBJECT
宏初始化。
InputFile
包含一个 QMap<int,InputStream*>
,创建 InputStream
个对象并将它们插入 QMap
.
InputStream
使用显式构造函数初始化,然后像这样插入到映射中:
InputStream myStream = InputStream(this, *myParameter);
_myMap.insert(myInt, *myStream);
编译器returns参考我的插入调用的一些错误:
/opt/Qt5.5.0/5.5/gcc/include/QtCore/qobject.h:461: error: 'QObject::QObject(const QObject&)' is private
Q_DISABLE_COPY(QObject)
^
/home/myusername/Documents/Projects/MyProject/inputfile.cpp:17: error: no match for 'operator*' (operand type is 'InputStream')
_myMap.insert(myInt, *myStream);
^
然后我尝试将 InputStream
初始化为指针:
InputStream *myStream = InputStream(this, *myParameter);
在这种情况下,编译器returns出现如下错误:
/home/myusername/Documents/Projects/MyProject/inputfile.cpp:16: error: cannot convert 'InputStream' to 'InputStream*' in initialization
InputStream *myStream = InputStream(this, *myParameter);
^
我也曾尝试在插入调用中使用引用 (&
),但这仍然是 returns 第一个错误。
如何根据需要初始化我的对象并将其插入我的 QMap
?
第一个错误意味着你不能复制QObject子类,所以你应该使用指向它的指针(正如你在开始时所说的),所以你需要第二种方法,但是你忘记了分配内存和构造对象(你忘记了新关键字)。所以只使用:
InputStream *stream = new InputStream(...);
如果 _myMap
确实是 QMap<int,InputStream*>
那么您应该只插入原始指针,而不是指针指向的对象:
_myMap.insert(myInt, myStream);
错误消息告诉您不能复制 QObjects。 Here 解释了为什么 QObjects 不可复制。
我设置了两个 类,InputFile
和 InputStream
。两者都继承QObject
,并用Q_OBJECT
宏初始化。
InputFile
包含一个 QMap<int,InputStream*>
,创建 InputStream
个对象并将它们插入 QMap
.
InputStream
使用显式构造函数初始化,然后像这样插入到映射中:
InputStream myStream = InputStream(this, *myParameter);
_myMap.insert(myInt, *myStream);
编译器returns参考我的插入调用的一些错误:
/opt/Qt5.5.0/5.5/gcc/include/QtCore/qobject.h:461: error: 'QObject::QObject(const QObject&)' is private
Q_DISABLE_COPY(QObject)
^
/home/myusername/Documents/Projects/MyProject/inputfile.cpp:17: error: no match for 'operator*' (operand type is 'InputStream')
_myMap.insert(myInt, *myStream);
^
然后我尝试将 InputStream
初始化为指针:
InputStream *myStream = InputStream(this, *myParameter);
在这种情况下,编译器returns出现如下错误:
/home/myusername/Documents/Projects/MyProject/inputfile.cpp:16: error: cannot convert 'InputStream' to 'InputStream*' in initialization
InputStream *myStream = InputStream(this, *myParameter);
^
我也曾尝试在插入调用中使用引用 (&
),但这仍然是 returns 第一个错误。
如何根据需要初始化我的对象并将其插入我的 QMap
?
第一个错误意味着你不能复制QObject子类,所以你应该使用指向它的指针(正如你在开始时所说的),所以你需要第二种方法,但是你忘记了分配内存和构造对象(你忘记了新关键字)。所以只使用:
InputStream *stream = new InputStream(...);
如果 _myMap
确实是 QMap<int,InputStream*>
那么您应该只插入原始指针,而不是指针指向的对象:
_myMap.insert(myInt, myStream);
错误消息告诉您不能复制 QObjects。 Here 解释了为什么 QObjects 不可复制。