Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Xenom от Декабрь 11, 2017, 20:53



Название: Cannot convert
Отправлено: Xenom от Декабрь 11, 2017, 20:53
Цитировать
cannot convert 'Circle*' to 'QFrame::Shape*' in initialization
         Shape *shape = new Circle();
Код:
class Shape : public QWidget
{
    Q_OBJECT
public:
    Shape(int = 0, int = 0, QWidget *p = nullptr);
    virtual ~Shape();
...
}
Код:
class Circle
        : public Shape
{
public:
    Circle(int = 0, int = 0, int = 25);
    Circle(QPoint , int = 25);
    Circle(Circle *);
    virtual ~Circle();
...
}

P.S. Компилятор gcc


Название: Re: Cannot convert
Отправлено: kambala от Декабрь 11, 2017, 21:06
- отсутствует Q_OBJECT в Circle, возможно дело в этом
- сообщение об ошибке какое-то странное: упоминает QFram (QFrame?), хотя Shape наследуется от QWidget


Название: Re: Cannot convert
Отправлено: Xenom от Декабрь 11, 2017, 21:15
-Добавил Q_OBJECT, запустил qmake, проблема осталась
-QFrame


Название: Re: Cannot convert
Отправлено: Xenom от Декабрь 11, 2017, 21:25
Наверно это связоно с тем, что я создаю Circle в mousePressEvent, так как попробовал так же создать в конструкторе MainWindow там без ошибок.


Название: Re: Cannot convert
Отправлено: kambala от Декабрь 11, 2017, 23:10
значит надо показать больше кода, как минимум этот mousePressEvent


Название: Re: Cannot convert
Отправлено: Igors от Декабрь 12, 2017, 09:40
А что за QFram? Может классы объявлены в разных namespace(ах) ?


Название: Re: Cannot convert
Отправлено: Old от Декабрь 12, 2017, 09:44
В QFrame есть свой тип Shape, он доступен всем наследникам этого класса, а их не мало.
Или переименуйте класс Shape, или поместите его в свой namespace и указывайте его, или показывайте компилятору.
Сейчас можно указатель компилятору, что Shape внешний класс:
Код
C++ (Qt)
::Shape *shape = new Circle();
 


Название: Re: Cannot convert
Отправлено: Xenom от Декабрь 12, 2017, 13:17
Спасибо, переименовал класс помогло.