Если класс «A» имеет указатель на другой класс «B», можно ли получить доступ к классу B для открытых методов - PullRequest
0 голосов
/ 09 сентября 2018

Только что перешел с программирования на c на c ++, все еще учусь каждый день. Я застрял с проблемой компиляции. Допустим, у меня есть класс Element, класс Log, а другой производный класс Element назовем его Rx. Теперь из класса Log я хочу получить доступ к class Element публичному методу. Пожалуйста, предложите какой-нибудь способ сделать это, если вы считаете, что то, что я делаю, не является правильным способом сделать это. Первый метод, который я попробовал, - добавить указатель на класс Element в классе Log, а затем попытался получить доступ к методу. Вторым способом я попытался передать ссылку / указатель на класс Log:initialize(Element *element). добавление фрагмента кода ниже.

Method1:

class Element {
public:
    void add_handler(int param);
    // ..... other member and methods
}
class Rx: public Element {
     //...... other methods
     Log record;
}
class Log {
public:
      void initialize() {
         e->add_handler(10);
      }
private:
    Element *e;
}

Method2:

class Element {
public:
    void add_handler(int param);
    // ..... other member and methods
}
class Rx: public Element {
public:
     // ...... other methods
     Log record;
}
class Log {
      void initialize(Element *element) {
         element->add_handler(10);
      }
private:
    Element *e;
}

в обоих кодах я получаю одну и ту же ошибку " error: недопустимое использование нестатической функции-члена ", которая находится в инициализации функции, где я пытаюсь получить доступ к e->add_handler.

Хотелось бы понять, почему возникает ошибка и есть ли у вас какие-либо предложения сделать это.

Теперь для нестатической функции у класса нет памяти, поэтому оператор e->add_handler указывает на какую-либо память? Я предполагаю, что нет, тогда как компиляция разрешает это?

Спасибо всем за помощь.

1 Ответ

0 голосов
/ 09 сентября 2018

add_handler() не определено в public:: -)

Функции-члены (также называемые методами) по умолчанию private: (то есть, если ничего не указано) при использовании ключевого слова class & public:, когда указано struct.

...