Доступ к элементам класса наследника из класса родителя

280
28 сентября 2017, 15:06

Каким образом можно работать с классом С в классе В?

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

Answer 1

Вы пытаетесь обратиться к члену класса С через неинициализированный указатель, который не указывает на какой-либо корректный объект класса С. То есть, гадите в память. Указатель надо инициализировать - либо адресом существующего объекта класса С, либо создать прямо в конструкторе новый оператором new. Тогда все будет ОК.

Answer 2

Компилятор просто не видит определения класса C при обращении к нему. Поэтому вам нужно просто вынести конструктор, определяя его после определения класса C.

Что, понятно, не снимает необходимости инициализировать указатель :)

Так что как вы откомпилировали и запустили этот код - лично я не понимаю.

Кстати, у вас еще и точки с запятой после определений классов отсутствуют. Скорее всего, вы даете не совсем тот код, с которым работаете - а это уже некорректно по отношению к отвечающим.

READ ALSO
Как скомпилировать OpenGL(freeglut) с MinGW на С++

Как скомпилировать OpenGL(freeglut) с MinGW на С++

Проекты на С собираю вот так:

270
В чем разница между PID и HANDLE процесса?

В чем разница между PID и HANDLE процесса?

В чем между ними разница и что можно сделать с процессом имея либо PID либо HANDLE?

327