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

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

Войти
Регистрация
Восстановить пароль
 
Tolias28
204 / 119 / 2
Регистрация: 18.08.2010
Сообщений: 1,010
05.03.2013, 17:07     Перекрестные заголовочные файлы. Как быть? #1
Есть два класса. Первый знает о втором классе, а второй о первом. Потому ссылки на заголовочные файлы получаются перекрестными. Из-за этого компилятор жестко бесится и сыплет кучу маловразумительных ошибок:
Код
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++ заголовочные файлы в с++
Заголовочные файлы C++
C++ Заголовочные файлы
Заголовочные файлы C++
C++ Как грамотно подключать заголовочные файлы?
C++ Заголовочные файлы
C++ Заголовочные файлы .h, файлы исходного когда c/c++ и установление связи между ними
C++ Заголовочные файлы
Работа в Visual Studio 2015 - как добавить файлы исходного кода и заголовочные файлы? C++
Как правильно расположить заголовочные файлы? C++
C++ Как правильно подключать заголовочные файлы?
Как правильно использовать заголовочные файлы при раздельной компиляции в MS Visual Studio? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 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
204 / 119 / 2
Регистрация: 18.08.2010
Сообщений: 1,010
05.03.2013, 17:15  [ТС]     Перекрестные заголовочные файлы. Как быть? #3
Jupiter, спасибо!
Yandex
Объявления
05.03.2013, 17:15     Перекрестные заголовочные файлы. Как быть?
Ответ Создать тему
Опции темы

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