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

Использование классом объектов другого класса - C++

Восстановить пароль Регистрация
 
space_agent
 Аватар для space_agent
0 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 4
10.01.2014, 20:23     Использование классом объектов другого класса #1
Допустим есть два класса, назовём их First и Second, которые используют друг друга.
Объявления классов в заголовочных файлах, определения в cpp:

Пример:
First.h

C++
1
2
3
4
5
6
7
8
9
10
#include "Second.h"
class First
{
int field;
public:
First ();
void method();
}
 
#include "First.h"
Second.h

C++
1
2
3
4
5
6
7
class
{
First * obj;
public:
Second(First * );
void sec();
}

Если через #include добавлять заголовочные файлы классов друг к другу, как указано выше, это будет нарушением SOLID.
Но если пробовать написать, допустим, таким образом:

C++
1
class First;
Second.h

C++
1
2
3
4
5
6
7
class
{
First * obj;
public:
Second(First *);
void sec();
}
то в конструкторе можно присвоить obj полученный объект типа First, но нельзя его использовать.
В смысле, нельзя обратиться к методам.

Компилятор выдаёт ошибку: недопустимый неполный тип.

Создать новый объект типа First тоже нельзя, т. е. если написать в конструкторе
C++
1
obj = new First();
вылезет та же ошибка.

Подскажите, если не трудно, что я делаю не так и как нужно использовать объекты классов.

Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 20:23     Использование классом объектов другого класса
Посмотрите здесь:

C++ Ошибка компиляции (преобразование объекта класса в объект другого класса)
C++ Инициализация объектов класса в конструкторе другого класса
Как получить private переменную класса, функцей членом другого класса C++
Использование priority_queue со своим классом C++
C++ Преобразование объектов одного класса в объекты другого
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
10.01.2014, 20:28     Использование классом объектов другого класса #2
Что это значит?
которые используют друг друга.
Вот это естественно
Компилятор выдаёт ошибку: недопустимый неполный тип.
тк должно быть
C++
1
2
3
4
5
6
7
class Second
{
First * obj;
public:
Second(First *);
void sec();
}
xoror
 Аватар для xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
10.01.2014, 20:37     Использование классом объектов другого класса #3
Если все конструкторы перенести в .cpp файл, то можно будет создать объект класса First
space_agent
 Аватар для space_agent
0 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 4
10.01.2014, 20:44  [ТС]     Использование классом объектов другого класса #4
Цитата Сообщение от AnDrew_LP Посмотреть сообщение
Что это значит?

Нужно, чтобы Second мог обращаться к методам объекта First, а в First можно было создавать объекты Second.

Вот это естественно

тк должно быть
C++
1
2
3
4
5
6
7
class Second
{
First * obj;
public:
Second(First *);
void sec();
}
Извиняюсь, я забыла написать название класса.
Так и есть, но не работает.

Добавлено через 53 секунды
Цитата Сообщение от xoror Посмотреть сообщение
Если все конструкторы перенести в .cpp файл, то можно будет создать объект класса First
В смысле? В заголовочных файлах только объявление класса, все определения в cpp.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
10.01.2014, 20:48     Использование классом объектов другого класса #5
Какие-то фрагменты пишете.
В заголовочные файлы - объявления, в cpp - инклуды и реализацию.
xoror
 Аватар для xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
10.01.2014, 20:49     Использование классом объектов другого класса #6
Цитата Сообщение от space_agent Посмотреть сообщение
В заголовочных файлах только объявление класса, все определения в cpp.
Да, в заголовочных файлах должны быть только объявления. Определения классов перенести в .cpp файлы
И в файле second.cpp подключить first.h

second.cpp:
C++
1
#include "first.h"
space_agent
 Аватар для space_agent
0 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 4
10.01.2014, 20:55  [ТС]     Использование классом объектов другого класса #7
Цитата Сообщение от 0x10 Посмотреть сообщение
Какие-то фрагменты пишете.
В заголовочные файлы - объявления, в cpp - инклуды и реализацию.
Да, так и есть.
Все инклуды в cpp?
А как тогда создать поле типа другого класса?

Добавлено через 5 минут
Цитата Сообщение от xoror Посмотреть сообщение
Да, в заголовочных файлах должны быть только объявления. Определения классов перенести в .cpp файлы
И в файле second.cpp подключить first.h

second.cpp:
C++
1
#include "first.h"
Заработало. Спасибо большое.)
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
10.01.2014, 20:59     Использование классом объектов другого класса #8
Цитата Сообщение от space_agent Посмотреть сообщение
А как тогда создать поле типа другого класса?
Хранить указатель или ссылку. Ну уже и так ответили.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 21:01     Использование классом объектов другого класса
Еще ссылки по теме:

Массив объектов класса как член другого класса C++
массив объектов в конструкторе другого класса C++
C++ Использование параметра экземпляра класса из другого cpp

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

Или воспользуйтесь поиском по форуму:
space_agent
 Аватар для space_agent
0 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 4
10.01.2014, 21:01  [ТС]     Использование классом объектов другого класса #9
Цитата Сообщение от 0x10 Посмотреть сообщение
Хранить указатель или ссылку. Ну уже и так ответили.
Да. Спасибо.)
Yandex
Объявления
10.01.2014, 21:01     Использование классом объектов другого класса
Ответ Создать тему
Опции темы

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