簡體   English   中英

在QMap中插入QObject *-無法初始化或傳遞指針

[英]Inserting QObject * in QMap - cannot initialize or pass the pointer

我設置了兩個類, InputFileInputStream 兩者都繼承QObject ,並使用Q_OBJECT宏進行初始化。

InputFile包含一個QMap<int,InputStream*> ,創建InputStream對象並將其插入QMap

使用顯式構造函數初始化InputStream ,然后將其插入到地圖中,如下所示:

InputStream myStream = InputStream(this, *myParameter);
_myMap.insert(myInt, *myStream);

編譯器返回了一些有關我的插入調用的錯誤:

/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);

在這種情況下,編譯器將返回以下錯誤:

/home/myusername/Documents/Projects/MyProject/inputfile.cpp:16: error: cannot convert 'InputStream' to 'InputStream*' in initialization
             InputStream *myStream = InputStream(this, *myParameter);
                                                                        ^

我也嘗試在插入調用中使用引用( & ),但這仍然返回第一個錯誤。

如何根據需要初始化對象並將其插入QMap

第一個錯誤意味着您無法復制QObject子類,因此應使用指向它的指針(如開頭所述),因此您需要第二種方法,但是卻忘記分配內存並構造對象(忘記了new關鍵字)。 所以只使用:

InputStream *stream = new InputStream(...);

如果_myMap實際上是QMap<int,InputStream*> ,則應僅插入原始指針,而不要插入指針指向的對象:

_myMap.insert(myInt, myStream);

錯誤消息告訴您不能復制QObject。 是為什么不能復制QObject的說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM