Russian Qt Forum
Ноябрь 23, 2024, 18:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: error: passing const ... discards qualifiers  (Прочитано 9692 раз)
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
Записан
diver6413
Гость
« Ответ #1 : Февраль 04, 2010, 12:48 »

Код:
QMailAddress *copy = new QMailAddress(addr);
?
Записан
crossly
Гость
« Ответ #2 : Февраль 04, 2010, 12:53 »

а если вот так
Код:
foreach(QMailAddress addr, msg.to())
Записан
Akaiten
Гость
« Ответ #3 : Февраль 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() возвращает &.
« Последнее редактирование: Февраль 04, 2010, 12:57 от Akaiten » Записан
shender
Гость
« Ответ #4 : Февраль 04, 2010, 13:08 »

спс
Все помогло.
Уже сам потом догнал
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.126 секунд. Запросов: 21.