Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt 4.3.0] ошибка при компиляции


Автор: anatox91 10.3.2008, 19:35
привет всем! компилирую код из книги
Код

#include <QApplication>
#include <APushButton.h>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QPushButton *button = new QPushButton("Quit");
    QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit()));
    button->show();
    return app.exec();
}

и при компиляции mingw пишет мне ошибки, что не объявлен QPushButton... скажите пожалуйста что я не так делаю? может инклюд не тот?

Автор: SABROG 10.3.2008, 19:41
Цитата(anatox91 @ 10.3.2008,  19:35)
#include <APushButton.h>

А книга наверно отсканирована и распознана файнридером... Или у кого-то ручки кривые...

Код

#include <QPushButton.h>

Автор: anatox91 10.3.2008, 19:41
все, сам допер, подключил QPushButtonи заработало... странно почему в книге неправильно написано, ведь она 2007 года... вроде не старая...

Автор: JackYF 10.3.2008, 23:26
Цитата(SABROG @  10.3.2008,  18:41 Найти цитируемый пост)
.h

зачем ".h"?

Автор: SABROG 10.3.2008, 23:49
Цитата(JackYF @ 10.3.2008,  23:26)
Цитата(SABROG @  10.3.2008,  18:41 Найти цитируемый пост)
.h

зачем ".h"?

Ну разницы то не будет, это все-равно, что вызывать программу как program, а не program.exe. В угловых скобках заключаются хидеры библиотек компилятора, в двойных кавычках хидеры твоей программы. Просто все привыкли делать так как их учили мануалы и книги smile , я так вообще не заморачиваюсь по поводу используемых компонентов и включаю только #include <QtGui>. Ну еще дополнительные модули типа:

QtNetwork
QtOpenGL
QtScript
QtSql
QtSvg
QtWebKit
QtXml
QtXmlPatterns
Phonon
Qt3Support
QtDesigner
QtUiTools
QtHelp
QtAssistant
QtTest
QAxContainer
QAxServer
QtDBus

Автор: nickless 11.3.2008, 00:35
Цитата(SABROG @  10.3.2008,  21:49 Найти цитируемый пост)
Ну разницы то не будет, это все-равно, что вызывать программу как program, а не program.exe

Под никсами надо по крайней мере с маленькой буквы писать, http://doc.trolltech.com/4.0/qt4-intro.html#include-syntax значит так надо, в будущих версиях Qt хедеры с .h могут вообще убрать.
Цитата(What's New in Qt 4)

Include Syntax

The syntax for including Qt class definitions has become

    #include <QClassName>

For example:

    #include <QString>
    #include <QApplication>
    #include <QSqlTableModel>

This is guaranteed to work for any public Qt class. The old syntax,

    #include <qclassname.h>

still works, but we encourage you to switch to the new syntax.

Автор: anatox91 11.3.2008, 17:52
я как раз подключал <QPushButton>  smile  да и так удобнее - просто имя класса и все... 

Автор: Любитель 11.3.2008, 18:05
Цитата(SABROG @  10.3.2008,  23:49 Найти цитируемый пост)
program, а не program.exe

Это совсем другое. К хейдерам никакие .h, .hpp, .hh автоматом никто подставлять не будет. А кутешные хейдеры с аш-ками вроде как депрекатед.

Цитата(SABROG @  10.3.2008,  23:49 Найти цитируемый пост)
включаю только #include <QtGui>

А время компиляции?

Автор: bsa 11.3.2008, 18:34
Цитата(Любитель @ 11.3.2008,  18:05)
Цитата(SABROG @  10.3.2008,  23:49 Найти цитируемый пост)
включаю только #include <QtGui>

А время компиляции?

PCH (precompiled headers) еще никто не отменял.  smile 

Автор: SABROG 11.3.2008, 18:41
Цитата(Любитель @  11.3.2008,  18:05 Найти цитируемый пост)
депрекатед

Вот нельзя сказать просто "анахронизм" или "устаревшее", пришлось в переводчик лезть  smile 

Нашел вот чего, правда так и не понял где и в каких случаях применимы те или иные вариации, тайна покрытая мраком...
Цитата

Директива #include

Директива #include заставляет компилятор прочитать и скомпилировать указаный исходный файл. Требование "включаить файл" рассматривается препроцессором как требование заменить строку с этой командой на содержимое указанного файла. Полученный комбинированный текст обрабатывается транслятором, который трактует его как единый файл с текстом программы. Для записи этой дириктивы используется слудющая общая форма:

#include "имя_файла"

#include <имя_файла>

Имя исходного файла, подлежащего прочтению, должно быть заключено в двойные кавычки или угловые скобки. Если имя файла заключено в угловые скобки, то поиск файла будет осуществляться способом, определенным создателем компилятора. Часто это означает, что поиск выполняется в некотором специальном разделе (каталоге), выделенном для заголовочных (подстановочных, включаемых) файлов. Имя и путь этого раздела может задавать пользователь в настройках компилятора. Если же имя файла заключено в кавычки, поиск файла выполняется другим способом, зависящим от конкретной реализации. Во многих случаях это означает поиск в текущем рабочем каталоге. Если заданный файл не найден, поиск повторяется с использованием первого способа, как если бы имя файла было бы заключено в угловые скобки. Если и здесь требуемый файл не найден, то препроцессор выдаст сообщение об ошибке.

Помимо включения файлов, Си-программы используют директиву #include для включеня заголовков. В языке Си определен набор стандартных заголовков, которые представляют информацию, необходимыю для различных библиотек (под заголовком может подразумеваться файл, но это совсем не обязательно). Таким образом, заголовок - это просто абстракция, которая гарантирует включение соответсвующей информации. Однако на практике C-заголовки почти всегда являются файлами, а имена заголовков - действительными именами файлов. Для языка C++ ситуация иная. Все имена C++-заголовков представляют собой стандартные идентификаторы, которые компилятор может преобразовать в имена файлов или обработать каким-либо другим способом. А поскольку C++-заголовки не являются именами файлов, они не имеют расширения .h.

Операторы #include могут быть вложенными внутри других включаемых файлов. Директива #include не должна оканчиваться точкой с запятой.

Автор: Любитель 11.3.2008, 18:45
Всмысле? Ты про кавычки и угловые скобки? Если да, то:
  -- угловые скобки - поиск файла по инклюд-директориям, задаваемых тем или иным компилеро-зависимым способом.
  -- кавычки - поиск файла в текущей (относительно текущей) директории и далее там же, где и в случае угловых скобок.

Автор: SABROG 11.3.2008, 18:56
Цитата(Любитель @ 11.3.2008,  18:45)
Всмысле? Ты про кавычки и угловые скобки? Если да, то:
  -- угловые скобки - поиск файла по инклюд-директориям, задаваемых тем или иным компилеро-зависимым способом.
  -- кавычки - поиск файла в текущей (относительно текущей) директории и далее там же, где и в случае угловых скобок.

Да нет, это я знал. Я про расширение. Там в цитате внизу написано. Т.е. компилятор C++ не считает include файлом, а считает абстракцией, так вот мне интересно как выглядит этот второй случай, когда хидер не является файлом...

Автор: JackYF 11.3.2008, 21:58
Цитата(SABROG @  11.3.2008,  17:56 Найти цитируемый пост)
как выглядит этот второй случай, когда хидер не является файлом...


ну, примеров на практике пока что нет smile

Автор: Любитель 16.3.2008, 12:52
Цитата(SABROG @  11.3.2008,  18:56 Найти цитируемый пост)
 Т.е. компилятор C++ не считает include файлом, а считает абстракцией, так вот мне интересно как выглядит этот второй случай, когда хидер не является файлом...

Это гипотетический вариант, предусмотренный священным стандартом smile В природе не встречается...

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