Доступ к личным членам класса

0

У меня есть такая классная структура

class B;

class A {
  private: 
      B *b;
  public:
      A(int val) {
           b->SetVal(val);
      }
};

class B {
  private:
      int mynum;
  public:
      B();
      void SetVal(int value) {
          mynum = value;
      }
};

И главное:

void main(){
  A Head(10);
}

Эта программа компилируется, но во время выполнения возвращает нарушение доступа. Я понимаю, что mynum в class B является private но даже если я сделаю его общедоступным, это не сработает. Почему это?

Теги:

3 ответа

2
Лучший ответ

вы должны инициализировать *b и удалить в ~A()

class A {
  private: 
      B *b;
  public:
      A(int val) {
           b=new B();
           b->SetVal(val);
      }
      ~A()
     {
        if(b)
        {
           delete b;
           b=0;
        }
     }
};
  • 0
    Я думаю, что b = новый B (); потребуется полная спецификация класса B, которая недоступна в заголовочном файле, но будет доступна, если c-tor будет помещен в файл реализации.
0

Вы на самом деле не указали указатель B нигде. Поэтому, когда ваш конструктор пытается сделать b->SetVal(val), вы, вероятно, получите нарушение доступа к памяти и определенно не получите четко определенного поведения.

0

Это не имеет никакого отношения к тому, что mynum является частным. Вы всегда можете получить доступ к частным членам класса из методов этого класса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню