Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Archont
8 / 8 / 0
Регистрация: 29.09.2012
Сообщений: 47
12.01.2013, 22:38     как создать классы с взаимными ссылками #1
Доброго времени суток.

Есть класс с некоторым функционалом, и есть 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

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

Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.01.2013, 22:41     как создать классы с взаимными ссылками #2
вынести реализацию A::f() и B::f() в отдельный файл или перенести её ниже класса main
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 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();
     }
Но так никогда не делай, ибо- запутывание кода...
Archont
8 / 8 / 0
Регистрация: 29.09.2012
Сообщений: 47
13.01.2013, 09:59  [ТС]     как создать классы с взаимными ссылками #4
Вынес реализацию в отдельный файл и все заработало. Единственное что напрягает - все классы сейчас в одном файле и это очень большой файл, а в последствии станет еще больше... Можно ли как нибудь разнести их по разным файлам? И еще один вопрос: как правильно подключать библиотеки, внутри блока #ifndef или вне его?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.01.2013, 12:53     как создать классы с взаимными ссылками #5
Цитата Сообщение от Archont Посмотреть сообщение
И еще один вопрос: как правильно подключать библиотеки, внутри блока #ifndef или вне его?
внутри
Цитата Сообщение от Archont Посмотреть сообщение
Единственное что напрягает - все классы сейчас в одном файле и это очень большой файл, а в последствии станет еще больше...
выноси каждый класс в отдельный хедер-файл
Yandex
Объявления
13.01.2013, 12:53     как создать классы с взаимными ссылками
Ответ Создать тему
Опции темы

Текущее время: 00:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru