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

Трудности с организацией классовой иерархии - C++

Войти
Регистрация
Восстановить пароль
 
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.08.2012, 00:45     Трудности с организацией классовой иерархии #1
Класс A использует данные класса B для выполнения своих методов, которые вызывает класс B. Что не хватает этому коду для того чтобы он закомпилировался?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
class B;
 
class A
{
    B* v;
public:
    A(B* e): v(e) {}
    void m() { v->c(); }
    void c() { std::cout << 0; }
};
class B
{
    A* v;
public:
    B(): v(new A(this)) {}
    void m() { v->c(); }
    void c() { std::cout << 1; }
};
void main()
{
    B* b(new B);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2012, 00:45     Трудности с организацией классовой иерархии
Посмотрите здесь:

C++ Визуальное отображение иерархии
C++ Оператор вывода для иерархии
организация разветвленной иерархии классов C++
Классы и иерархии, одарите советами C++
C++ Подскажите с организацией класса
Цепочка иерархии классов C++
C++ Затрудние в названии иерархии классов
Приведение указаталей, принадлежащих к различной классовой иерархии C++
Постоение иерархии наследования C++
Создать иерархии наследования C++
Создание иерархии классов C++
C++ Найти ошибку в иерархии пользовательских классов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.08.2012, 00:48     Трудности с организацией классовой иерархии #2
реализуйте методы после объявления классов A и B. тогда, когда компилятор будет компилировать эти методы, он уже будет знать и о классе A и о классе B, т.е. код вызова методов этих классов будет компилироваться.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class A
{
    B* v;
public:
    A(B* e): v(e) {}
    void m() { v->c(); } // вот для компиляции этой строки класс B должен быть уже определен. но он определен ниже. поэтому метод нужно реализовывать после.
    void c() { std::cout << 0; }
};
class B
{
    A* v;
public:
    B(): v(new A(this)) {} // тут ок, потому что класс A определен выше.
    void m() { v->c(); } // тут ок, потому что класс A определен выше.
    void c() { std::cout << 1; }
};
 
void A::m() { v->c(); } // тут все ок. класс B уже определен и можно дергать его методы.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.08.2012, 00:54  [ТС]     Трудности с организацией классовой иерархии #3
Спасибо. А как быть если у меня все тела функций вынесены в cpp, сами описания классов находятся в соответствующих h?
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.08.2012, 01:02     Трудности с организацией классовой иерархии #4
там все будет нормально, потому что в спп файле определения (не имплементация методов) классов уже видны (за счет того, что в начале спп файла идут инклуды с этими определениями).
вообще, есть у меня непонятнки с терминами.

C++
1
2
3
4
5
6
7
8
class A
{
public:
  void F();   
};
 
// вот это я назвал определением класса. хотя возможно что правильно это называется объявлением класса.
// нужно поштудировать тему definition vs declaration
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.08.2012, 01:20  [ТС]     Трудности с организацией классовой иерархии #5
заробрался... спасибо ещё раз.
Yandex
Объявления
21.08.2012, 01:20     Трудности с организацией классовой иерархии
Ответ Создать тему
Опции темы

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