powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Кросс включение заголовочных файлов
13 сообщений из 13, страница 1 из 1
Кросс включение заголовочных файлов
    #34185823
Funt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть два заголовочных файла с описанием классов. Каждый класс содержит экземпляр другого:

Файл "ProxyContext.h"

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#pragma once
#include "ServiceContext.h"
#include "ProxySocketMgr.h"

class CProxyContext : public CServiceContext  
{
public:
	CProxyContext() {};
	virtual ~CProxyContext() {};
	CProxySocketMgr *m_pCurServer;
	void TraceRequest(LPСTSTR chRequest);
};

Файл "ProxySocketMgr.h"

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#pragma once
#include "SocketComm.h"

class CProxyContext;

class CProxySocketMgr : public CSocketComm  
{
public:
	CProxySocketMgr();
	virtual ~CProxySocketMgr();

	void AppendMessage(LPCTSTR strText) {
		if (NULL != m_pContext)
			m_pContext->TraceRequest(strText);
	};

protected:
	CProxyContext *m_pContext;
};

Ошибка возникает при вызове метода TraceRequest класса CProxyContext, хотя без него (только с описанием переменной m_pContext) все компилируется.
Не подскажите, как разрешить данную проблему.

Компилируется в Visual Studio 2005, если что
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34185875
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за ошибка?
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34185916
Funt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Error 23 error C2027: use of undefined type 'CProxyContext' c:\mydocs\visual studio 2005\projects\icontri\i3service\proxysocketmgr.cpp 17
Error 24 error C2227: left of '->TraceRequest' must point to class/struct/union/generic type c:\mydocs\visual studio 2005\projects\icontri\i3service\proxysocketmgr.cpp 17
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34185957
Funt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решается добавлением
Код: plaintext
#include "ProxyContext.h"
в "ProxySocketMgr.cpp"

Единственное, хочется понять, верно это или нет. Я считал, что достаточно одного включения (в "ProxyContext.cpp"). Возможно, я не прав.
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34186071
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuntПроблема решается добавлением
Код: plaintext
#include "ProxyContext.h"
в "ProxySocketMgr.cpp"

Единственное, хочется понять, верно это или нет. Я считал, что достаточно одного включения (в "ProxyContext.cpp"). Возможно, я не прав.

Каждый cpp отрабатывается отдельно, поэтому если в нем нет включения он ничего не будет знать об описании класса.
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34186102
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuntПроблема решается добавлением
Код: plaintext
#include "ProxyContext.h"
в "ProxySocketMgr.cpp"

Единственное, хочется понять, верно это или нет. Я считал, что достаточно одного включения (в "ProxyContext.cpp"). Возможно, я не прав.

Ашники служат для объявления.
При этом на проходе компилятора, по исходникам смотрится та инфа которая необходима... Если Вы объявляете указатель на класс (а имя класса просто объявлено выше) внутри ашника (к примеру) - то компилятор знает его размерность - это ему ДОСТАТОЧНО. А вот когда Вы зовёте метод этого класса - этой инфы (что он просто некий класс) - уже не достаточно. Для этого нужно описание этого класса, из которого вычисляются относительные смещение в бинарном коде.

То что Вы разместили полное описание класса в другом сипипишнеке (который лезет к его методу) - это нормально.

И ещё. Очень редки те ситуации, когда компилятор компилирует - но ошибка возникает из за не правильной трактовки кода (к исключениям мона отнести НЕ типизированное использование указателей и иже). Можно сказать, что задача программиста складывается из этапов: компиляции (самая первая лёгкая победа), успешного запуска (уже получше), правильной физической работы (ну считай одна треть дела), правильной логической работы (уже половину прошли), и работы без глюков (ну это как коммунизм - на горизонте и к этому стремимся)...


удачи Вам
(круглый)
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34186655
Funt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за просвещение начинающего.
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34186697
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
достаточно вынести тело AppendMessage в спп-файл и будет счастье.
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34186758
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoдостаточно вынести тело AppendMessage в спп-файл и будет счастье.

Так он это и так сделал
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34186942
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, не сделал, тело функции в ашнике сидит, а должно сидеть в сппшнике.
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34186950
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoнет, не сделал, тело функции в ашнике сидит, а должно сидеть в сппшнике.

Разве студия не должна говорить, что ошибка в ашнике, который инклудится из сипипишника?
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34186966
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хмм... может быть...
значит забыл в сппшнике ProxyContext.h подрубить
...
Рейтинг: 0 / 0
Кросс включение заголовочных файлов
    #34189949
Fenriz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если расставить все точки над i,
то вот это забвная фишка include при компиляции просто вставляет файл что указан в данный код.
описание должно быть подключено выше самой имплементации, для предотвращения нежелательных пересечений лутше использовать class xxxx extern "C++";
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Кросс включение заголовочных файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]