Общий вопрос знаний о классах и экземплярах классов в C ++ - PullRequest
0 голосов
/ 27 сентября 2011

Начну с моей проблемы: Моя проблема в том, что я получаю ошибку сегментации, когда пытаюсь получить доступ к функции public внутри экземпляра в классе.

Предположим, у меня есть класс A, в котором есть несколько экземпляров классов, например:

class A {
      ...

    public:
        class B *B;
        class C *C;

};

Давайте рассмотрим класс A как наш "глобальный" класс; то есть класс A отправляется каждому классу, который я инициализирую и которому владею. Следовательно, каждая функция класса может вызывать функции из класса A до A->function(). Кроме того, предполагая, что другие экземпляры были инициализированы, каждый класс может вызывать функции экземпляров, принадлежащих A, например: A->B->function(). До сих пор все работало отлично. Моя проблема в том, что у меня внезапно возникает ошибка при попытке получить доступ к функции одного из экземпляров, принадлежащих A. Я думаю, что причина в том (и почему я задаю этот вопрос, потому что я не уверен), что экземпляр класса A отправляется в класс C до того, как экземпляр B был инициализирован. Затем в классе C я просто создаю копию указателя (имеется в виду, что у моего класса C есть личный экземпляр A, называемый class A *A). Итак, когда я впервые создаю экземпляр класса C, я отправляю ему класс A и все его открытые члены, которые затем конструктор C делает локальной копией A.

Уф. Это было трудно сделать без представления кода. Итак, вот вопрос; скажем, одна из моих функций класса A содержит:

C *c = new C(this);

и конструктор для C имеет это:

C(A *a_val) { a = a_val; }

и содержит также частный указатель экземпляра class A *a;

затем другая функция в A создает экземпляр класса B. Сможет ли мой класс C использовать этот класс B? И если нет (именно поэтому я думаю, что я segfaulting), как я мог бы решить эту проблему?

Спасибо!

1 Ответ

0 голосов
/ 27 сентября 2011

В общем случае ваш код будет зависать, если вы разыменуете указатель на унитизированную переменную.Из вашего описания это звучит как то, что происходит, хотя трудно сказать, учитывая отсутствие примера, который дает сбой.

другая функция в A создает экземпляр класса B.Может ли мой класс C использовать этот класс B?

Да.Это должно работать, если вы правильно создали экземпляр и передали указатель на B правильно на C. Также обратите внимание, что это поможет получить терминологию немного более корректно в приведенном выше вопросе:

другая функция в A создает экземплярыобъект класса B.Сможет ли мой объект C использовать этот объект B?

Полагаю, вышеизложенное именно то, что на самом деле хотел сказать ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...