Russian Qt Forum

Программирование => С/C++ => Тема начата: shender от Февраль 04, 2010, 12:26



Название: error: passing const ... discards qualifiers
Отправлено: shender от Февраль 04, 2010, 12:26
Народ имеется класс QMailAddress, в котором определен оператор копирования.
Также имеется класс QMailMessage, котороый содержит QList<QMailAddress *> список
есть функция которая возвращает этот список
Код:
typedef QList<QMailAddress *>QMailAddressList;
.........
QMailAddressList &QMailMessage::to()
{
    Q_D(QMailMessage);
    return d->to;
}
при попытке в новом классе, куда QMailMessage передается с const, произвести копирование след. образом выдает ошибку
Код:
QSmtpMailSender::QSmtpMailSender(QSmtpPrivate *parent,
                                const QString &host, int port,
                                const QString &user, const QString &pass,
                                const QMailMessage &msg ) : QObject(parent)
{
    QMailAddress from = msg.from();

    foreach(QMailAddress *addr, msg.to())
    {
        QMailAddress *copy = new QMailAddress(*addr);
        mail_from_address_list.append(copy);
    }

ошибка:
qsmtpmailsender.cpp:16: error: passing `const QMailMessage' as `this' argument of `QMailAddressList& QMailMessage::to()' discards qualifiers


Название: Re: error: passing const ... discards qualifiers
Отправлено: diver6413 от Февраль 04, 2010, 12:48
Код:
QMailAddress *copy = new QMailAddress(addr);
?


Название: Re: error: passing const ... discards qualifiers
Отправлено: crossly от Февраль 04, 2010, 12:53
а если вот так
Код:
foreach(QMailAddress addr, msg.to())


Название: Re: error: passing const ... discards qualifiers
Отправлено: Akaiten от Февраль 04, 2010, 12:54
Так как msg объявлен как const, то для него можно вызывать только константные методы, т.е. те, которые определены с const. Объявите const версию метода QMailMessage::to(), например так:
Код
C++ (Qt)
class QMailMessage {
...
const QMailAddressList & to() const;
...
};
 
const QMailAddressList &QMailMessage::to() const
{
   Q_D(QMailMessage);
   return d->to;
}
 

Добавлено 12:57. const QMailAddressList так же необходимо так как to() возвращает &.


Название: Re: error: passing const ... discards qualifiers [решено]
Отправлено: shender от Февраль 04, 2010, 13:08
спс
Все помогло.
Уже сам потом догнал