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

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

Войти
Регистрация
Восстановить пароль
 
Tolias28
205 / 120 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
#1

Перекрестные заголовочные файлы. Как быть? - C++

05.03.2013, 17:07. Просмотров 767. Ответов 2
Метки нет (Все метки)

Есть два класса. Первый знает о втором классе, а второй о первом. Потому ссылки на заголовочные файлы получаются перекрестными. Из-за этого компилятор жестко бесится и сыплет кучу маловразумительных ошибок:
Код
Error	2	error C2143: syntax error : missing ';' before '*'	d:\test\testprojects\cpp_ololo\cpp_ololo\cashier.h	9	1	cpp_ololo
Error	3	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	d:\test\testprojects\cpp_ololo\cpp_ololo\cashier.h	9	1	cpp_ololo
Error	4	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	d:\test\testprojects\cpp_ololo\cpp_ololo\cashier.h	9	1	cpp_ololo
Error	5	error C1020: unexpected #endif	d:\test\testprojects\cpp_ololo\cpp_ololo\client.cpp	8	1	cpp_ololo

Error	7	error C2143: syntax error : missing ';' before '*'	d:\test\testprojects\cpp_ololo\cpp_ololo\client.h	8	1	cpp_ololo
Error	8	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	d:\test\testprojects\cpp_ololo\cpp_ololo\client.h	8	1	cpp_ololo
Error	9	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	d:\test\testprojects\cpp_ololo\cpp_ololo\client.h	8	1	cpp_ololo
Error	10	error C1020: unexpected #endif	d:\test\testprojects\cpp_ololo\cpp_ololo\cashier.cpp	7	1	cpp_ololo
	11	IntelliSense: identifier "Client" is undefined	d:\test\testprojects\cpp_ololo\cpp_ololo\cashier.h	9	2	cpp_ololo
Написал в каждом файле #pragma once, но ничего не меняется. Попробовал использовать include guards, но, как ни странно, все ошибки на месте, да еще и новые прибавились:
Код
Warning	1	warning C4603: 'Client_CPP' : macro is not defined or definition is different after precompiled header use	d:\test\testprojects\cpp_ololo\cpp_ololo\client.cpp	3	1	cpp_ololo
Warning	6	warning C4603: 'Cashier_CPP' : macro is not defined or definition is different after precompiled header use	d:\test\testprojects\cpp_ololo\cpp_ololo\cashier.cpp	3	1	cpp_ololo
Я не знаю, что делать. Как решить эту проблему вместе с тем, чтобы каждый класс знал о другом классе?

Client.h
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma once
#ifndef Client_H
#define Client_H
#include "Cashier.h"
class Client
{
public:
    Cashier* cashier;
};
 
#endif //Cashier_H
Client.cpp
C++
1
2
3
4
5
6
7
8
#pragma once
#ifndef Client_CPP
#define Client_CPP
#include "stdafx.h"
#include "Client.h"
 
 
#endif //Client_CPP
Cashier.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
#ifndef Cashier_H
#define Cashier_H
#include "Client.h"
 
class Cashier
{
public:
    Client* client;
};
 
#endif //Cashier_H
Cashier.cpp
C++
1
2
3
4
5
6
7
#pragma once
#ifndef Cashier_CPP
#define Cashier_CPP
#include "StdAfx.h"
#include "Cashier.h"
 
#endif //Cashier_CPP
StdAfx.h
C++
1
2
3
4
5
6
7
8
9
10
#pragma once
#pragma once
#ifndef stdafx_H
#define stdafx_H
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>
 
#endif //stdafx_H
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 17:07     Перекрестные заголовочные файлы. Как быть?
Посмотрите здесь:

Как правильно подключать заголовочные файлы? - C++
прошу более продвинутых прогеров чем я найти и/или сделать ту библиотеку которая включает функции ниже. iostream: cin cout ...

Как правильно расположить заголовочные файлы? - C++
Здравствуйте, проблема такая: Имею три класса #ifndef __ACCOUNT_H__ #define __ACCOUNT_H__ #include &quot;Post.h&quot; class...

Как грамотно подключать заголовочные файлы? - C++
Как грамотно подключать заголовочные файлы? Можно ли их все собрать в stdafx.h а потом инклюдить там где они мне нужны? А то сейчас...

Как правильно использовать заголовочные файлы при раздельной компиляции в MS Visual Studio? - C++
Если я использую функцию cout и cin в каждом модуле, мне нужно в каждом модуле прописывать : #include &lt;iostream&gt; using namespace std; ...

Заголовочные файлы - C++
Здравствуйте ув. Пользователи, У меня такой вопрос: Есть ли хорошие книги по заголовочным файла как правильно ими пользоваться... Просто...

Заголовочные файлы - C++
Добрый день. Вот такой вопрос. Пишу на Борланде. Не пойму как писать, если классы помещать в свои файлы. Вот например,...

Заголовочные файлы - C++
Компилятор выдает ошибку на запись: #include &lt;iostream.h&gt; - &quot;не удается открыть источник файл iostream.h&quot;. Скажите, iostream.h - это...

заголовочные файлы в с++ - C++
я вот не могу понять, их обязательно делать в своих программах? В том смысле, что бы код был, так сказать &quot;правильным, хорошим&quot;. Хотел...

Заголовочные файлы - C++
Подключил два заголовочных файла, при компиляции пишет, что не знает имени функции Header.h #pragma once float F1(float* ar1,...

Заголовочные файлы (.h) - C++
Доброго времени суток господа! Озадачился вопросом по поводу заголовочных файлов. Но подробного, или понятного мне ответа так и не нашёл....

Заголовочные файлы - C++
Всем добрый день! Пытался найти информацию по созданию заголовочных файлов, да не нашел. У меня есть здоровая шаблонная функция ...

заголовочные файлы - C++
напишите пожалуйста,что делают заголов.файлы &lt;io.h&gt; и &lt;direct.h&gt; Добавлено через 8 минут и расшифруйте условие: ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.03.2013, 17:14     Перекрестные заголовочные файлы. Как быть? #2
хедеры
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef Client_H
#define Client_H
 
class Cashier;
 
class Client
{
public:
    Cashier* cashier;
};
 
#endif //Cashier_H
Добавлено через 48 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef Cashier_H
#define Cashier_H
 
class Client;
 
class Cashier
{
public:
    Client* client;
};
 
#endif //Cashier_H
в цпп включаем оба хедера
Tolias28
205 / 120 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
05.03.2013, 17:15  [ТС]     Перекрестные заголовочные файлы. Как быть? #3
Jupiter, спасибо!
Ответ Создать тему
Опции темы

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