2015-09-24 10 views
0

У меня есть два класса, InputFile и InputStream. Оба наследуют QObject и инициализируются макросом Q_OBJECT.Вставка QObject * в QMap - невозможно инициализировать или передать указатель

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?

ответ

0

Первая ошибка означает, что вы не можете скопировать подкласс QObject, поэтому вам следует использовать указатель на него (как вы сказали в начале), так что вам нужен ваш второй подход, но вы забыли выделить память и построить объект (вы забыл новое ключевое слово). Так что используйте только:

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

«Новое» ключевое слово решило его, спасибо. – Alexandre

0

Если _myMap действительно QMap<int,InputStream*> то вы должны вставить только сырой указатель, а не объект, на который указывает указатель:

_myMap.insert(myInt, myStream); 

Сообщение об ошибке говорит вам, что вы не может копировать QObjects. Here - это объяснение того, почему QObjects не копируются.