Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > qt Где здесь ошибка синтаксиса?


Автор: yoweb 30.5.2013, 15:36
qt Где здесь ошибка синтаксиса?
Код

#ifndef PREVIEWER_H
#define PREVIEWER_H

#include "ui_previewer.h"

class Previewer : public QWidget, public Ui::Form
{
    Q_OBJECT

public:
    Previewer(QWidget *parent = 0);

    void setBaseUrl(const QUrl &url);

public slots:
    void on_previewButton_clicked();

private:
    QUrl baseUrl;
};
#endif


7: error: expected class-name before '{' token
19: error: field 'baseUrl' has incomplete type

Автор: Guinness 30.5.2013, 15:43
Цитата(yoweb @  30.5.2013,  16:36 Найти цитируемый пост)
7: error: expected class-name before '{' token

Ui::Form неизвестный класс для компилятора, сделайте соответствующий #include

Цитата(yoweb @  30.5.2013,  16:36 Найти цитируемый пост)
19: error: field 'baseUrl' has incomplete type

#include <QUrl> сделайте.


Автор: bsa 30.5.2013, 16:00
скорее всего, класс был сделан для формы с именем Form, а она потом была переименована в Previewer. Скорее всего, необходимо заменить Form на Previewer.

Автор: rodnover 31.5.2013, 05:12
Цитата

   корее всего, класс был сделан для формы с именем Form, а она потом была переименована в Previewer. Скорее всего, необходимо заменить Form на Previewer.
   

Нет, просто добавить include

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51a748696ccc19fc22000002#findElement_E7045_51a807266ccc196e0700191f_0

Автор: shizoid 7.8.2013, 13:42
А разве множетсвенное наследование от QObject классов прокатит?

Автор: bsa 7.8.2013, 14:22
shizoid, а где ты его тут увидел? Ui::Form это примитивная структура с указателями на компоненты формы и парой методов для создания формы и для перевода.

Автор: shizoid 7.8.2013, 15:22
Я этот фрагмент кода имел ввиду, на сколько я помню множественное наследование классов использующищ QObject запрещается.
Код

сlass Previewer : public QWidget, public Ui::Form

Автор: bsa 7.8.2013, 15:29
shizoid, видимо ты слышал звон, но не понял откуда он. Нельзя, чтобы у одного класса было более одного предка, наследующего QObject. А больше ограничений нет.
Обычное наследование - по сути это включение членов предка в тело наследника. А вот когда появляются виртуальные методы или виртуальное наследование, то тут все усложняется.
В данном случае для Ui::Form применяется простое наследование. Мне только одно непонятно, почему оно публичное (не критично, конечно, но должно быть приватным).

Автор: akizelokro 8.8.2013, 13:12
А почему после Q_OBJECT нет точки с запятой?

Добавлено через 1 минуту и 34 секунды
Или оно в Qt так принято?  smile 

Автор: bsa 8.8.2013, 14:20
akizelokro, так принято. Потому что Q_OBJECT это "страшный" макрос, добавляющий функции, необходимые для работы сигналов и слотов.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)