добавление указателей на класс в QList QList ‹Class *›

В моем mainwindow.h у меня есть QList m_qlServoList, который должен хранить указатели на объекты Servo:

QList<Servo* > m_qlServoList;

Когда я пытаюсь добавить новый указатель сервопривода в QList:

m_qlServoList.append(new Servo(iID, iBaudRate));

Следующие результаты ошибки:

passing 'const QList<Servo*>' as 'this' argument of 'void QList<T>::append(const T&) [with T = Servo*]' discards qualifiers [-fpermissive]

Заголовок класса Servo выглядит следующим образом:

class Servo
{
public:
    Servo(const int &iID, const int &iBaudRate);
    ~Servo();

    void write_data(Data const& data) const;
    Data& receive_data() const;

private:
    Data m_oData;
};

Было бы здорово, если бы кто-нибудь объяснил мне, что я здесь делаю не так. И как правильно добавлять указатели на сервообъекты.


person evolved    schedule 06.07.2013    source источник


Ответы (1)


Хотя у нас нет информации, вполне вероятно, что ваш QList<Servo *> const.

Это могло произойти, если ваш вызов был сделан из const метода класса, содержащего QList.

Давайте посмотрим на пример:

class MyClass
    {
        private:
          QList<Servo *> m_qlServoList;
        public:
          void addServo(Servo *ptr) const /* Notice the const here */
            {
              m_qlServoList.append(prt); 
            }
     };

/* from main */
MyClass c;
c.addServo(new Servo(iID, iBaudRate));

Этот код не компилируется, потому что метод addServo() - это const, что означает, что m_qlServoList будет рассматриваться как const QList<Servo *>.

person Xaqq    schedule 06.07.2013
comment
Спасибо @Xaqq за вашу помощь и пример, он решил проблему! Приносим извинения за то, что не предоставили дополнительную информацию о методе, вызывающем функцию m_qlServoList.append(). Ключевое слово const было причиной ошибки. - person evolved; 06.07.2013