Russian Qt Forum

Qt => Общие вопросы => Тема начата: ireus от Январь 05, 2010, 21:50



Название: Повторение примера
Отправлено: ireus от Январь 05, 2010, 21:50
Попробовал повторить в Creator'e 4.60 пример Dendy с зависимостями (http://www.prog.org.ru/topic_11935_15.html). После компиляции получил:

D:/Programming/qt/Projects/Myhello/main.cpp:4: error: 'printSomething' was not declared in this scope.

Но почему? Ведь в файле broken.h эта функция продекларирована:

#include <stdio.h>
 inline void printSomething()
{
    printf( "Hello!\n" );
}

Что не так?


Название: Re: Повторение примера
Отправлено: niXman от Январь 05, 2010, 21:57
я хидер подключить не забыл?


Название: Re: Повторение примера
Отправлено: ireus от Январь 05, 2010, 21:59
Возможно, только не соображу, как это сделать...


Название: Re: Повторение примера
Отправлено: ireus от Январь 05, 2010, 22:02
Ежели в про файле. то там порядок.
TARGET = Myhello
CONFIG += console
HEADERS += broken.h
SOURCES += main.cpp



Название: Re: Повторение примера
Отправлено: niXman от Январь 05, 2010, 22:07
в main.cpp добавь строку #include <broken.h>


Название: Re: Повторение примера
Отправлено: ireus от Январь 05, 2010, 22:10
Ну что тут скажешь! Согласитесь, что без идиотов мир был беднее. Миллион благодарностей!!!


Название: Re: Повторение примера
Отправлено: ireus от Январь 05, 2010, 22:21
Чуток поспешил:
D:/Programming/qt/Projects/Myhello/main.cpp:1: error: broken.h: No such file or directory
И как следствие:
D:/Programming/qt/Projects/Myhello/main.cpp:4: error: 'printSomething' was not declared in this scope



Название: Re: Повторение примера
Отправлено: ireus от Январь 05, 2010, 22:28
Так в натуре:

main.cpp
#include <broken.h>
int main( int argc, char ** argv )
{
    printSomething();
    return 0;
}

broken.h
#include <stdio.h>
 inline void printSomething()
{
    printf( "Hello!\n" );
}

Myhello.pro
TARGET = Myhello
CONFIG += console
HEADERS += broken.h
SOURCES += main.cpp


Название: Re: Повторение примера
Отправлено: ireus от Январь 05, 2010, 22:30
Кажется, понял ошибку. Надо заменить Myhello на broken и будет счастье.

Всем спасибо.


Название: Re: Повторение примера
Отправлено: Dendy от Январь 05, 2010, 22:31
Используйте двойные кавычки вместо треугольных: #include "broken.h".


Название: Re: Повторение примера
Отправлено: ireus от Январь 05, 2010, 23:08
Спасибо, Dendy, Поражаюсь только, как на ровном месте сумел так накосячить ;D

И ещё вопрос. Чтобы увидеть надпись, я должен организовать бесконечный цикл? Не подскажете как это лучше сделать?


Название: Re: Повторение примера
Отправлено: Dendy от Январь 05, 2010, 23:22
printf() пишет в stdout, чтобы увидеть результат программу нужно запускать не из эксплорера, а набрав руками в консоли: broken.exe


Название: Re: Повторение примера
Отправлено: ireus от Январь 05, 2010, 23:24
Благодарю, Dendy! Очень признателен.


Название: Re: Повторение примера
Отправлено: ireus от Январь 06, 2010, 10:37
Код broken.h (переименованный в broken.exe) напрямую в консоле не работает (делал через тотал командер). Попробовал внести изменения:

#include <stdio.h>
 
int main( int argc, char ** argv )
{
    printf( "Hello!\n" );
    return 0;
}

То же самое, виснет. Убрал аргументы в int main () - без изменен6ий. Может быть printf не работает в ДОС или всё же надо через cmd запускаться, а не через TC?


Название: Re: Повторение примера
Отправлено: Dendy от Январь 06, 2010, 11:04
С трудом понимаю чего вы хотите добиться. Рекомендую начать с бумажной книжки по C/C++.


Название: Re: Повторение примера
Отправлено: ireus от Январь 06, 2010, 12:10
Согласен. Получается что-то сумбурное. Вообще-то я инженер-электронщик, приходилось программировать промышленные контроллеры (Beckhoff, Siemens и т.п.). Сейчас работаю в области пьезотехники, скоро появятся задачи программирования интерфейсов для встроенных контроллеров (операционка может быть любой). Qt заинтересовала своей кросс-платформенностью, работой с встроенными ОС. Вообще задача будущего - построение эмулятора встроенного в пользовательскую систему контроллера. Сейчас пытаюсь разобраться с Криэйтером применительно к работе с консолью, но, как Вы правильно заметили, подводят пробелы с Си++.
Скажите, пожалуйста. имеет ли смысл работа в криэйторе с языком Си? (не С++). Или лучше обойтись, например, Vim'ом и не морочить себе и другим голову?


Название: Re: Повторение примера
Отправлено: ireus от Январь 06, 2010, 12:19
Всё-таки получил своё Hello!. Через ТС вышел в DOS, запустил .exeЮ который скомпилировал ранее в Qt. Благодарю за терпение.


Название: Re: Повторение примера
Отправлено: Dendy от Январь 06, 2010, 12:27
Я бы на вашем месте пробовал собирать программки в консоли, без IDE. Возьмите хорошую книжку, внимательно читайте и пробуйте. Как в школе.