Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
Заблокирован
1

Как одному классу узнать о другом в другом файле, если они не имеют общего наследования

10.09.2014, 15:09. Показов 3156. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть два класса в разных файлах, первому классу нужно знать о втором и использовать указатели типа второго у себя внутри, второму нужно знать о первом и использовать указатели типа первого у себя внутри.
Если я в первый класс включаю (include) второй, а во второй - первый, с учётом того, что в каждом хедера класса есть защита от множественного включения, то получается, что либо первый не видит второй, либо второй - не видит первый, т.к. один из них раньше включается, а во втором срабатывает защита от включения и его не видно...
Классы не имеют общего наследования.
Как в таких случаях поступают ?

Добавлено через 28 минут
Да, и ещё. В каждом из этих классов есть свой enum, ну просто, какой - то свой enum для своего класса, так вот enum другого класса тоже надо видеть в классе
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2014, 15:09
Ответы с готовыми решениями:

Как три нуля заменим на единицы, если они стоят друг с другом только ровно три?
В массиве using System; using System.Collections.Generic; using System.Linq; using...

Нужно вызвать через сторонний метод(в другом классе,который в другом файле) метод в форме
public void Print_Inform(int numb1,int znak,int numb2) { switch(znak) { case 1:...

Заменить ссылки в одном файле на ссылки, находящиеся в другом файле, если последние сегменты ссылок совпадают
Здравствуйте, подскажите, пожалуйста, как можно сделать замену ссылок в txt файле? Заменять нужно...

Как использовать экземпляр класса, объявленный в одной файле, в другом файле?
В первой форме я создал класс TBook и массив экземпляров этого класса TBook Book. Как использовать...

5
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
10.09.2014, 15:13 2
Scrooge McDuck, используют предварительное объявление. h-файлы подключаются в cpp (это кстати всегда предпочтительнее, при прочих равных), в h - предвариетльное объявление.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//1.h
class MyClass1;
 
class MyClass2
{
//.....
    MyClass1 * ref_;
};
 
//2.h
class MyClass2;
 
class MyClass1
{
    //....
    MyClass2 * ref_;
};
1
Заблокирован
10.09.2014, 15:30  [ТС] 3
Цитата Сообщение от DrOffset Посмотреть сообщение
используют предварительное объявление
Спасибо, с этим разобрался, в вот как со всякими структурами или enum-ами поступить ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef ONE_H
#define ONE_H
 
#include "two.h"
 
enum ONE_ENUM
{
    ONE_ENUM_ONE,
    ONE_ENUM_TWO    
};
 
class One
{
public:
    One();
 
private:
    Two* two;
    
    void Test(TWO_ENUM value);
};
 
#endif // ONE_H
C++
1
2
3
4
5
6
7
8
9
10
11
#include "one.h"
 
One::One()
{
    Two = new Two;
}
 
void One::Test(TWO_ENUM value)
{
    
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef TWO_H
#define TWO_H
 
#include "one.h"
 
enum TWO_ENUM
{
    TWO_ENUM_ONE,
    TWO_ENUM_TWO    
};
 
class Two
{
public:
    Two();
private:
    One *one;
    void Test(ONE_ENUM value);
};
 
#endif // TWO_H
C++
1
2
3
4
5
6
7
8
9
10
11
#include "two.h"
 
Two::Two()
{
    one = new One;
}
 
void Two::Test(ONE_ENUM value)
{
    
}
Добавлено через 11 минут
Да, и кстати, если я предварительно объявлю класс (см пример кода постом выше):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef TWO_H
#define TWO_H
 
class One;
 
enum TWO_ENUM
{
    TWO_ENUM_ONE,
    TWO_ENUM_TWO
};
 
class Two
{
public:
    Two();
private:
    One *one;
//    void Test(ONE_ENUM value);
};
 
#endif // TWO_H
то при попытке создания экземпляра получу ошибку:
C++
1
2
3
4
Two::Two()
{
    one = new One;
}
== ERROR: C2512: 'One' : no appropriate default constructor available
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
10.09.2014, 15:47 4
Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
Two::Two() { one = new One; }
в файле, где описан этот код (.срр файл), надо сделать инклуд файла, где прототип вызываемого конструктора.

а энумы можно в отдельный заголовочный файл вынести, который будет подключаться везде где надо.
1
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
10.09.2014, 15:48 5
Лучший ответ Сообщение было отмечено Scrooge McDuck как решение

Решение

Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
то при попытке создания экземпляра получу ошибку:
Заголовочный файл (one.h) подключать в тот сpp, где определен:
C++
1
2
3
4
Two::Two()
{
    one = new One;
}
(two.cpp). Я же об этом написал выше
Соответственно enum из one.h тоже буден видет в реализации two.cpp.
1
Заблокирован
10.09.2014, 15:49  [ТС] 6
Я уже разобрался, можно инклюдить файл сколько угодно, хоть из одного файла в другой, а из него обратно, главное писать предварительную декларацию, как было сказано выше, а поскольку по предварительной декларации компилятор не может узнать, что внутри класса, то нужно ещё инклюд этого класса делать, но с предварительной декларацией уже ругаться не будет и будет всё включено как надо . Бред в общем, но я его сделал
0
10.09.2014, 15:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2014, 15:49
Помогаю со студенческими работами здесь

Как открывать с поддомена домена, привязанного к одному серверу, директорию на другом сервере
Итак есть 2 сервера и 2 домена. Назовем их сервер A и B и домен A и B соответственно. Был создан...

MFC. Как работать с элементами которые друг над другом и они полностью перекрываются
Только начал изучать MFC и API. Вопрос, связанный с удобством работы. Не совсем разобрался как...

Как мне узнать по классу в каком файле.h он находится?
Здравствуйте. В среде (java) eclipse , как и в NetBeans, есть возможность импортировать не...

Как узнать об изменении DependencyProperty в другом объекте
Приветствую. В общем суть в следующем. Есть источник "ИмяЭкзамена", вот мне нужно знать когда оно...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru