Russian Qt Forum
Июнь 15, 2024, 07:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по include  (Прочитано 4380 раз)
catprog
Гость
« : Июль 03, 2009, 12:03 »

Есть "начальные"(GUI) mainwindow.h и mainwindow.cpp
И пусть есть класс MyControler описаный в файлах: mycontroler.h и mycontroler.cpp
Про файл:
Код:
QT += network
TARGET = my_http
TEMPLATE = app
SOURCES += main.cpp \
    mainwindow.cpp \
    mycontroler.cpp
HEADERS += mainwindow.h \
    mycontroler.h
FORMS += mainwindow.ui

Как правильно надо писать, где и что, чтобы в файлах mainwindow.h и mainwindow.cpp можно было пользовать этот класс?

Если я пишу например в файле mainwindow.h
class MyControler;
то это помогает только для файла mainwindow.h, хотя должно бы помочь и для mainwindow.cpp так как там есть строка include "mainwindow.h"  Непонимающий
А если такую строку написать в обоих файлах говорит что два раза так писать нельзя Непонимающий
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Июль 03, 2009, 12:11 »

напиши include "mycontroler.h" только в хедере
Записан
catprog
Гость
« Ответ #2 : Июль 03, 2009, 12:44 »

напиши include "mycontroler.h" только в хедере
Спасибо. Работает. А как понять почему оно работает именно так, может можно гдето почитать доходчивую статью?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июль 03, 2009, 12:49 »

Запись:
class MyControler;
Годится только для сообщения компилятору о том, что где-то(!) есть такая "штука".
Но чтобы этой "штукой" воспользоваться нужно её заголовочник с полным описанием.
Если ты объявляешь переменную (не указатель) типа MyControler, или используешь члены этого класса понадобится полное описание.

Часто делают так, в mainwindow.h:
class MyControler;

в mainwindow.cpp:
#include "mycontroler.h"

Тогда в заголовочнике не будет лишнего, а mainwindow.cpp будет включено полное описание
Записан

Юра.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Июль 03, 2009, 12:49 »

это описание языка си. директива #incude просто включает текст указанного файла. надпись class A; говорит что далее будет объявлен класс А, но при описании этой строки про класс ничего не известно (инфа-то в хедере). По сему ты можешь объявлять только указатели на него.
Если ты включаешь #incude "a.h" в b.h и b.cpp, то он у тебя вставит текст 2 раза (1 раз из b.h и 2й из b.cpp). Способ этого избежать - закдючать текст хедера в "скобки"
Код:
#ifndef __A
 #define __A
 тут твой класс
 #endif
Записан
catprog
Гость
« Ответ #5 : Июль 03, 2009, 13:36 »

Благодарю, теперь более мене ясно.
Если я правильно понял то если у меня в проекте будет файл mycontroler.h, то если по коду не будет #include "mycontroler.h" этот файл даже не откомпилиться.
И второе что понял - файлы *.cpp нигде не надо инклудить, они сами както инклудятся беспорядочным образом.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Июль 03, 2009, 13:38 »

в мейк файле есть строка g++ -c file1.cpp -o file1.o на каждый файл .cpp (грубо говоря). И есть строка g++ file1.o ... fileN.o -o твоя_программа.exe
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Июль 03, 2009, 23:33 »

И второе что понял - файлы *.cpp нигде не надо инклудить, они сами както инклудятся беспорядочным образом.

Может стоит затариться литературой?  Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 19.