crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Ошибка вида "no matching ... ClassName*&"
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2010, 17:20
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Есть такой код:
void SVGGraphics::setOnSVG(QString filename)
{
    QGraphicsScene *s = scene();
    rendererOn = new QSvgRenderer(filename, s); //объявлен: QSvgRenderer *rendererOn
}
на второй строчке получаю ошибку:
Цитата
error: no matching function for call to `QSvgRenderer::QSvgRenderer(QString&, QGraphicsScene*&)'
.../svg/qsvgrenderer.h:60: note: candidates are: QSvgRenderer::QSvgRenderer(const QSvgRenderer&)
.../src/svg/qsvgrenderer.h:69: note: QSvgRenderer::QSvgRenderer(const QByteArray&, QObject*)
.../src/svg/qsvgrenderer.h:68: note: QSvgRenderer::QSvgRenderer(const QString&, QObject*)
.../src/svg/qsvgrenderer.h:67: note: QSvgRenderer::QSvgRenderer(QObject*)
немогу понять почему компиллер пишет, то что я выделил жирным. Ведь я передаю указатель. А QGraphicsScene является наследником QObject.
Т.е. поидее должен вызываться конструктор:
QSvgRenderer::QSvgRenderer(const QString&, QObject*)

В чём проблема?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 25.1.2010, 18:22
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


а
#include<QGraphicsScene>
присутствует?
еще может не может без const различить эти два констуктора ?
QSvgRenderer(const QString &filename, QObject *parent=0);
QSvgRenderer(const QByteArray &contents, QObject *parent=0);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.1.2010, 6:58
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kwisp @ 25.1.2010, 21:22) *
#include<QGraphicsScene>
присутствует?
да
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 26.1.2010, 13:11
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


значит остаётся только это:
Цитата(kwisp @ 25.1.2010, 18:22) *
еще может не может без const различить эти два констуктора ?
QSvgRenderer(const QString &filename, QObject *parent=0);
QSvgRenderer(const QByteArray &contents, QObject *parent=0);

попробуй
void SVGGraphics::setOnSVG(const QString & filename)
{
    QGraphicsScene *s = scene();
    rendererOn = new QSvgRenderer(filename, s); //объявлен: QSvgRenderer *rendererOn
}

так кстати и троли рекомендуют делать, да и имя файла ты в setOnSVG не меняешь так что const QString& в самый раз.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.1.2010, 14:01
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


сейчас уже не поробую переделал иначе. Ошибка эта вылезла после добавления сцены в качестве аргумента, сначала было просто:
rendererOn = new QSvgRenderer(filename); //объявлен: QSvgRenderer *rendererOn
и всё компилелось

Цитата(kwisp @ 25.1.2010, 21:22) *
не может без const различить эти два констуктора ?
QSvgRenderer(const QString &filename, QObject *parent=0);
QSvgRenderer(const QByteArray &contents, QObject *parent=0);
а const'ом он как отличит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 26.1.2010, 15:15
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 26.1.2010, 14:01) *
а const'ом он как отличит?

не вдаваясь в подробности, конструктры QString & QByteArray не заданы explicit. можно предположить что первый парметр компилятор желает преобразовать и не знает к чему к const QString& (хотя по-идее это случай неяного преобразования и должен работать) или к const QByteArray&. Если укажешь const по-идее преобразовывать нельзя и он оставит параметр в неизменном виде. соответственно подойдёт конструктор QSvgRenderer(const QString &filename, QObject *parent=0)

попробуй, может и получится.

П.С.
по крайней мере явно узнаешь проблема в первом или во втором параметре.
QGraphicsScene унаследован от QObject public`ом c макросом Q_OBJECT не видно на первый взгляд причин для проблем с преобразованием.

Сообщение отредактировал kwisp - 26.1.2010, 15:18
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 5:29