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

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

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

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

12.01.2013, 22:38. Просмотров 350. Ответов 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++
Доброго времени суток. Прога написана с указателями,как указатели заменить ссылками? #include <iostream> #include <ctime> ...

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

Создать классы Person и Date - C++
Пожалуйста!!! Помогите!!! Нужно создать классы Person и Date для программы /она будет составляться в следующем задании/. Вот что...

Создать классы точки и треугольника - C++
Создать класс Pair (пара чисел); определить метод изменения полей и вычисления произведения чисел. Определить производный класс...

Классы : Создать класс автомобиль - C++
Само задание : Создать класс , который описывает автомобиль . Минимально с 3 атрибутами . Добавить каждому атрибуту set и get метод ....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.01.2013, 22:41     как создать классы с взаимными ссылками #2
вынести реализацию A::f() и B::f() в отдельный файл или перенести её ниже класса main
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,454
Записей в блоге: 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 или вне его?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2013, 12:53     как создать классы с взаимными ссылками
Еще ссылки по теме:

Создать классы матрицы и вектора - C++
Создать два класса вектор (int *) и матрица (int **) . Определить конструкторы по умолчанию,с параметром,для класса матрица с двумя...

Нужно создать класс С,наследующий классы A и B - C++
class A { int x; int a; A() { x=1; } } class B

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

Используя классы создать символьный стек - C++
Всем привет. Помогите пожалуйста Используя классы создать стек. . Его записи содержат указатель на очередь. Но мне нужно не числовой, а...

Классы. Создать массив объектов. Student - C++
Разработать консольную программу на языке С++, в которой описывается и используется простой класс для объектов индивидуального варианта....

Создать классы для форм (круг и треугольник) - C++
помогите кто сможет Требуется создать классы для форм (круг и треугольник), причём каждый из классов должен реализовать функции Area()...


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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.01.2013, 12:53     как создать классы с взаимными ссылками #5
Цитата Сообщение от Archont Посмотреть сообщение
И еще один вопрос: как правильно подключать библиотеки, внутри блока #ifndef или вне его?
внутри
Цитата Сообщение от Archont Посмотреть сообщение
Единственное что напрягает - все классы сейчас в одном файле и это очень большой файл, а в последствии станет еще больше...
выноси каждый класс в отдельный хедер-файл
Yandex
Объявления
13.01.2013, 12:53     как создать классы с взаимными ссылками
Ответ Создать тему
Опции темы

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