Re: Два класса, имеющих указатели друг на друга
От: _VanGOG_ Украина  
Дата: 30.09.08 15:15
Оценка:
Здравствуйте, blacksun, Вы писали:

B>cls2.h

B>
B>#pragma once

B>#include "cls1.h"

B>class cls1;

B>class cls2
B>{
B>public:
B>    cls2() { pCls1 = NULL; }
B>    int test2;
B>    cls1 *pCls1;

B>    void setp(cls1 *p);
B>    void prnt() { if (pCls1) printf("%d\n", pCls1->test1); } // <-- проблема здесь
B>};
B>



B>

1>>------ Build started: Project: simple, Configuration: Debug Win32 ------
1>>Compiling...
1>>simple.cpp
1>>d:\sources\itrium\simple\simple\cls2.h(15) : error C2027: use of undefined type 'cls1'
1>> d:\sources\itrium\simple\simple\cls2.h(5) : see declaration of 'cls1'
1>>d:\sources\itrium\simple\simple\cls2.h(15) : error C2227: left of '->test1' must point to class/struct/union/generic type



B>такое ощущение, что компилятор не знает, что у cls1 есть переменная test1.

B>подскажите, как побороть проблему?

Проблема в том, что на момент использования переменной pCls1 её тип не определён, есть только forward declaration.
В заголовочных файлах оставляем только forward declaration, include соответствующего .h переносим в .cpp (в .h он не нужен при fd), реализацию методов переносим в .cpp
Проблема уходит (указаная).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.