Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Sancho_s_rancho от Январь 10, 2010, 13:51



Название: Почему компилятор ругается на QString text(QChar(xxx));
Отправлено: Sancho_s_rancho от Январь 10, 2010, 13:51
Следующий код собирается:
Код:
QString text(QChar(80));
И такой тоже:
Код:
    int xxx = 80;
    QString text;
    text = QChar(xxx);
Но на третий вариант:
Код:
int xxx = 80;
QString text(QChar(xxx));
компилятор говорит:
error: no matching function for call to ‘QPainter::drawText(QPoint, QString (&)(QChar))’
ругаясь на строчку
Код:
painter.drawText(QPoint(0,mapSize.height()-1), text);
(void QPainter::drawText ( const QPoint & position, const QString & text ))



Название: Re: Почему компилятор ругается на QString text(QChar(xxx));
Отправлено: Dendy от Январь 10, 2010, 14:06
Потому что копилятор подумал, что text - это предварительное обьявление функции, которая принимает QChar и возвращает QString. Делайте так: QString text = QChar(xxx);


Название: Re: Почему компилятор ругается на QString text(QChar(xxx));
Отправлено: Sancho_s_rancho от Январь 10, 2010, 16:10
Потому что копилятор подумал, что text - это предварительное обьявление функции, которая принимает QChar и возвращает QString. Делайте так: QString text = QChar(xxx);
Интересно, а стандарт С++ как регламентирует такое?


Название: Re: Почему компилятор ругается на QString text(QChar(xxx));
Отправлено: Dendy от Январь 10, 2010, 16:35
Это один из конфликтов в C++, вроде >> при закрытии двойного шаблона. Лично я по умолчанию верю GCC. Вообще компилятор на этот случай превращает визуальный оператор присваивания в конструктор, следующие две записи эквивалентны:

Код
C++ (Qt)
QString text( QChar( xxx ) );
QString text = QString( QChar( xxx ) );
 

Я как правило пользуюсь второй, она более выразительна.


Название: Re: Почему компилятор ругается на QString text(QChar(xxx));
Отправлено: Sancho_s_rancho от Январь 10, 2010, 17:14
Спасибо за информацию, приму к сведению.