Каким образом можно работать с классом С в классе В?
class A
{
public:
int a;
A();
}
class C;
class B : public A
{
public:
int b;
C *c;
B():A()
{
cout<<"Hi I`m B"<<endl;
c->a = 5; //Тут ошибка:"Вызвано исключение по адресу 0x0F69533A в prog.exe:
//0xC0000005: нарушение прав доступа при записи по адресу 0x00000090."
}
}
class C : public B
{
public:
C();
}
Если создавать экземпляр класса а не указатель на него, то лучше не становится:
пишет, что класс C не содержит члена a
Вы пытаетесь обратиться к члену класса С через неинициализированный указатель, который не указывает на какой-либо корректный объект класса С. То есть, гадите в память. Указатель надо инициализировать - либо адресом существующего объекта класса С, либо создать прямо в конструкторе новый оператором new. Тогда все будет ОК.
Компилятор просто не видит определения класса C при обращении к нему. Поэтому вам нужно просто вынести конструктор, определяя его после определения класса C.
Что, понятно, не снимает необходимости инициализировать указатель :)
Так что как вы откомпилировали и запустили этот код - лично я не понимаю.
Кстати, у вас еще и точки с запятой после определений классов отсутствуют. Скорее всего, вы даете не совсем тот код, с которым работаете - а это уже некорректно по отношению к отвечающим.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей