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

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

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

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

12.01.2013, 22:38. Просмотров 335. Ответов 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

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

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2013, 22:38     как создать классы с взаимными ссылками
Посмотрите здесь:

Создать производные классы C++
C++ С++ классы. не могу создать производный клас нормально.
C++ ошибка со ссылками на классы
Прога написана с указателями,как указатели заменить ссылками C++
C++ Задача на Классы. Создать класс треугольник
C++ Классы. Создать массив объектов. Student
C++ Создать классы точки и треугольника
C++ Нужно создать класс С,наследующий классы A и B
Создать классы Person и Date C++
C++ Используя классы создать символьный стек
C++ Классы : Создать класс автомобиль
C++ Создать классы матрицы и вектора

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.01.2013, 22:41     как создать классы с взаимными ссылками #2
вынести реализацию A::f() и B::f() в отдельный файл или перенести её ниже класса main
Avazart
7044 / 5221 / 259
Регистрация: 10.12.2010
Сообщений: 22,941
Записей в блоге: 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++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.01.2013, 12:53     как создать классы с взаимными ссылками #5
Цитата Сообщение от Archont Посмотреть сообщение
И еще один вопрос: как правильно подключать библиотеки, внутри блока #ifndef или вне его?
внутри
Цитата Сообщение от Archont Посмотреть сообщение
Единственное что напрягает - все классы сейчас в одном файле и это очень большой файл, а в последствии станет еще больше...
выноси каждый класс в отдельный хедер-файл
Yandex
Объявления
13.01.2013, 12:53     как создать классы с взаимными ссылками
Ответ Создать тему
Опции темы

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