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

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

Войти
Регистрация
Восстановить пароль
 
Archont
8 / 8 / 0
Регистрация: 29.09.2012
Сообщений: 47
#1

как создать классы с взаимными ссылками - C++

12.01.2013, 22:38. Просмотров 377. Ответов 4
Метки нет (Все метки)

Доброго времени суток.

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class main;
 
class A
{
   main* m;
   f()
   {
      m->f();
   }
};
 
class B
{
  main* m;
   f()
   {
      m->f();
   }
};
 
class main
{
    void f();
};
в результате компилятор ругнулся:
[BCC32 Error] main.h(139): E2315 'f' is not a member of 'main', because the type is not yet defined

Подскажите, пожалуйста, как можно решить подобную задачу.

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2013, 22:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос как создать классы с взаимными ссылками (C++):

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

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.) - C++
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

Создать класс Point (точка). На его основе создать классы ColoredPoint и Line (линия) - C++
Привет Помогите пожалуйста с решением задачи на C++. вот задание: "Создать класс Point (точка). На его основе создать классы...

Создать абстрактный базовый класс Figure с виртуальной функцией Периметр. Создать производные классы Rectangle - C++
Создать абстрактный базовый класс Figure с виртуальной функцией -периметр.Создать производные классы Rectangle, Circle,Triangle,Rhomb в...

Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы - C++
Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы все фигуры, содержащие...

Непонятна тема (Классы содержащие другие классы, как данные члены ) - C++
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include <iostream> class Point { public: void SetX(int...

4
Jupiter
Каратель
Эксперт С++
6565 / 3986 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.01.2013, 22:41 #2
вынести реализацию A::f() и B::f() в отдельный файл или перенести её ниже класса main
1
Avazart
Эксперт С++
7433 / 5472 / 310
Регистрация: 10.12.2010
Сообщений: 24,391
Записей в блоге: 17
13.01.2013, 00:20 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class main_t;
 
class A
{
     main_t* m;
     void f();
};
 
class B
{
    main_t* m;
    void f();
};
 
class main_t
{
public:
        void f(){};
};
 
void A::f()
     {
            m->f();
     }
void B::f()
     {
            m->f();
     }
Но так никогда не делай, ибо- запутывание кода...
0
Archont
8 / 8 / 0
Регистрация: 29.09.2012
Сообщений: 47
13.01.2013, 09:59  [ТС] #4
Вынес реализацию в отдельный файл и все заработало. Единственное что напрягает - все классы сейчас в одном файле и это очень большой файл, а в последствии станет еще больше... Можно ли как нибудь разнести их по разным файлам? И еще один вопрос: как правильно подключать библиотеки, внутри блока #ifndef или вне его?
0
Jupiter
Каратель
Эксперт С++
6565 / 3986 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.01.2013, 12:53 #5
Цитата Сообщение от Archont Посмотреть сообщение
И еще один вопрос: как правильно подключать библиотеки, внутри блока #ifndef или вне его?
внутри
Цитата Сообщение от Archont Посмотреть сообщение
Единственное что напрягает - все классы сейчас в одном файле и это очень большой файл, а в последствии станет еще больше...
выноси каждый класс в отдельный хедер-файл
0
13.01.2013, 12:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2013, 12:53
Привет! Вот еще темы с ответами:

Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема - C++
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема:...

Создать класс - данные - абстрактный базовый класс. Создать производные классы - C++
Всем привет! У меня вот такая проблема.... Создать класс - данные - абстрактный базовый класс. Создать производные классы - данные типа...

Прога написана с указателями,как указатели заменить ссылками - C++
Доброго времени суток. Прога написана с указателями,как указатели заменить ссылками? #include <iostream> #include <ctime> ...

Создать производные классы - C++
Создать производные классы со своими методами вывода информации на экран (абстрактного класса Библиотека). Производные классы: 1....


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

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

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