Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Перекрестные ссылки заголовочных файлов


Автор: Kostt 24.4.2006, 07:06
Здравствуйте!
Проблема такая : хочу сделать 2 класса в разных файлах, так, чтобы они знали друг о друге

class1.h
Код

#include "class2.h"

class class1 {
m_pclass2* ptr;
}


class2.h
Код

#include "class1.h"

class class2 {
m_pclass1* ptr;
}


Компилятор ругается. Сделал так, что #include "class2" - в class1.cpp, работает. Вопрос : а если оба класса абстрактные(только .h файлы), возможно ли сделать, чтобы они знали друг о друге? 

Автор: chaos 24.4.2006, 07:13
class1.h
Код

class class2;

class class1 {
class2 *m_ptr;
}



class2.h
Код

class class1;

class class2 {
class1 *m_ptr;
}



  

Автор: MAKCim 24.4.2006, 07:22
Код

// class1.h
#ifndef __CLASS1_H
#define __CLASS1_H

class class2;

typedef class2 m_pclass2;

class class1
{
    m_pclass2* ptr;
};

#endif

Код

// class2.h

#ifndef __CLASS2_H
#define __CLASS2_H 

class class1;

typedef class1 m_pclass1;

class class2
{
    m_pclass1* ptr;
};

#endif

Код

// class1.cpp
...

Код

// class2.cpp
...

Код

// program.cpp
#include "class1.h"
#include "class2.h"

...


Добавлено @ 07:23 
chaos опередил! 

Автор: Kostt 24.4.2006, 08:08
Спасибо за советы. Все работает, но теперь вопрос вдогонку - а если я хочу чтобы эти 2 абстрактных класса знали реализацию друг друга? Ну есть у них чисто виртуальные функции, а есть такие, которые для всех потомков будут общими, и которые используют метод другого класса?  smile  

Автор: chaos 24.4.2006, 08:29
в реализации(cpp файле) подключишь заголовочный файл

Добавлено @ 08:30 
если я тебя правельно понял 

Автор: MAKCim 24.4.2006, 08:33
я же вроде написал
Код

// class1.cpp
#include "class1.h"
#include "class2.h"
// реализация class1

Код

// class2.cpp
#include "class1.h"
#include "class2.h"
// реализация class2


Добавлено @ 08:34 
chaos, синхронно работаем  smile  

Автор: Kostt 24.4.2006, 08:49
Точно, абстрактный класс же тоже может иметь .cpp файл реализации. Я просто часто inline классами пользуюсь, вот и недогнал сразу. Спасибо еще раз!  smile  

Автор: DeadSoul 24.4.2006, 10:05
Цитата(Kostt @  24.4.2006,  08:49 Найти цитируемый пост)
Я просто часто inline классами пользуюсь, вот и недогнал сразу

Этим ты увеличиваешь время компиляции. 

Автор: Kostt 24.4.2006, 11:20
Цитата(DeadSoul @ 24.4.2006,  10:05)
Этим ты увеличиваешь время компиляции.

Правда?  smile  А за счет чего и насколько сильно? 

Автор: DeadSoul 24.4.2006, 11:27
Цитата(Kostt @  24.4.2006,  11:20 Найти цитируемый пост)
Цитата(DeadSoul @ 24.4.2006,  10:05)
Этим ты увеличиваешь время компиляции.
Правда?    А за счет чего и насколько сильно?  

1. При изменениях реализации можно попасть на большой ребилд
2. Реализация данных методов появится во ВСЕХ cpp-файлах, включающих данный хедер, после обработки препроцессором
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)