Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 683
#1

Порядок Хедеров - C++

27.11.2010, 16:31. Просмотров 1293. Ответов 10
Метки нет (Все метки)

Добрый день, подскажите, как правильно подключать хедеры если имеются, несколько классов, которые использую друг друга.
А именно(все классы в разных файлах)
Код
Class1
{
   Class2 *cs2;
   Class3 *cs3;
};

Class2
{

};

Class3:public Class2;
{
    Class(Class1 *c){ cs1 = c; }
    Class1 *cs1;
};
В основ ошибка была в конструктора класса 3, пишет, что объект не определен. Попробовал подключить Хедер с этим классом, и началось... ошибка на ошибке, то множественное определение, то еще что.
Как корректно это все подключить надо?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2010, 16:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Порядок Хедеров (C++):

Компоновка хедеров - C++
Собственно вот такая проблема. Есть два файла first.h; second.h; каждый из них #include "vector.h"; И есть ещё файл tester.h; ...

Правильное подключение хедеров - C++
Здоровеньки булы. По совету DrOffset в теме http://www.cyberforum.ru/cpp-beginners/thread1308503.html попытался скомпоновать хедеры: ...

Зависимость двух хедеров - C++
Сталкивался много раз с такой проблемой, но каждый раз приходилось выкручиваться из нее разными способами, все-таки интересно стало как...

Порядок отрицательных членов изменить на обратный, порядок неотрицательных сохранить - C++
Задача (нужно все 3 пункта в 1 программе сделать) Прошу Помочь В условиях задания 3 а) порядок отрицательных членов изменить на...

Порядок обучение - C++
P.S плохо с русским Дорогие программисты у меня во время обучение в С++ возникли трудность ..... У вес начинающих программистов было...

Обратный порядок С++ - C++
Добрый вечер. Есть прога, но не могу разобраться в ней, можете поставить комментарии? И как реализовать этот же код программы, но что бы...

10
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.11.2010, 16:34 #2
TGrey[WoLf], Прописать в каждом хедере страж включения например
#ifndef _FILENAME_H_
#define _FILENAME_H_

И в конце файла #endif
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 683
27.11.2010, 16:55  [ТС] #3
И все же Класс3 жалуется, когда я пытаюсь вызвать функцию из 1 класса, который передается в конструктор.

Код
#ifndef....
#include "Class1.h"
class Class1;
Class3
{
    Class3(Class1 *c){ c1 = c; }
}
#endif
f is not member of Class1 because the type is not yet defined
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.11.2010, 23:53 #4
TGrey[WoLf],
C++
1
2
#include "Class1.h"
class Class1;
Вам не кажется, что стоит оставить что-то одно?
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 683
28.11.2010, 11:40  [ТС] #5
В таком случае жалуется на член-класса
Код
Class1 *cl;
Type name expected, Declaration missing ;
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
28.11.2010, 17:52 #6
Во-первых, удостоверься, что ты построил программу правильно, и что тебе нужны такие перекрёстные подключения. Если действительно нужны, то рецепт следующий:

В одном файле, который использует класс из другого файла напиши сверху
C++
1
class some_class;
и не подключай заголовок с этим классом, а в другом оставь влючённый заголовок.
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 683
28.11.2010, 18:15  [ТС] #7
Да вот я так и написал, прочитал, что если класс наследует другой, то базовый хедер надо подключить - подключил. Но ошибка в том, что когда я пытаюсь вызвать метод из этого класса который я написал перед основным, оно пишет, что метод не является методом того класса, потому что тип еще не объявлен.
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
28.11.2010, 19:19 #8
Без полного текста программы более подробно невозможно ответить.
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 683
28.11.2010, 19:35  [ТС] #9
Прикрепил архив.
В Unit4.cpp подключены 3 хедера. Но между собой оно конфликтуют.
Пробуя разные советы возможно там намутил чушь, если можно посмотрите, исправьте как нужно, для корректной работы.
0
Вложения
Тип файла: rar qwe.rar (654.6 Кб, 14 просмотров)
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
28.11.2010, 21:55 #10
Скомпилировать, к сожалению, не могу, но попробую разобраться так.

Во-первых, у тебя в файле "Player.h" написан тот же дефайн, что и в файле "Map.h", соответственно, один из них вообще подключён не будет. Нужно исправить, например, на
C++
1
2
#ifndef _PLAYER_H
#define _PLAYER_H
Файл "Player.h", насколько я понимаю, ничего лишнего не использует, поэтому его больше трогать не надо.
Файл "Map.h" пока не трогай.
В "Enemy.h" подключай "Player.h" и "Map.h" и убирай
C++
1
2
class CMap;
class Player;
А в файле "Unit4.cpp" попробуй подключить только "Enemy.h".
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 683
28.11.2010, 22:31  [ТС] #11
Все блин... Спасибо! Все виной кривые руки и копипаст. Действительно оно Плеер.ш просто не инклудило.
Я создал проект в Студии с той же иерархией, но там все работает. Оказывается, потому что там писал без копи\паста там все заинклудило как надо.
Вот такая рабочая структура:
Код
//main.cpp
#include "cA.h"
#include "cB.h"
#include "cC.h"
int main()
{
    A *a;
    a = new A();
    a->b = new B(2);
    a->b->a = 3;
    return 0;
}
//------------------------------------------------------
//cA.h
#ifndef _CA_H
        #define _CA_H
class B;
class C;
class A
{
public:
    void D();
    B *b;
    C *c;
};
#endif
//-------------------------------------------------------------
//cB.h
#ifndef _CB_H
        #define _CB_H
class B
{
public:
    B(int a){};
    int a;
};
#endif
//---------------------------------------------------------------
//cC.h
#ifndef _CC_H
        #define _CC_H
class C : public B
{
public:
    C() : B(1){};
    int b;
};
#endif
//-----------------------------------------------------------------
//func.cpp
#include "cA.h"
#include "cB.h"
#include "cC.h"
void A::D()
    {
        b = new B(2);   //
        b->a = 3;
    }
0
28.11.2010, 22:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2010, 22:31
Привет! Вот еще темы с ответами:

Обратный порядок - C++
Дан массив размера N. Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами,...

Шахматный порядок - C++
Привет всем :) Есть код. Нужно чтобы знак "*" выводился в шахматном порядке( смотрите вложение ). Заранее спасибо :) #include...

Обратный порядок - C++
Помогите пожалуйста написать программу, которая печатает текст в обратном порядке. Текст заканчивается точкой. Зарание спасибо!

Порядок перестановок - C++
Ребят, если сделайте одну задачку, буду очень вам признателен, спасибо заранее вам! Дано число N и K. Выведите K-ую перестановку в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.