【问题标题】:If a class "A" has a pointer to a another class "B" can A access class B public methods如果一个类“A”有一个指向另一个类“B”的指针,那么 A 可以访问 B 类的公共方法
【发布时间】:2018-09-09 18:06:54
【问题描述】:

刚从 c 编程转到 c++,还在每天学习。 我遇到了一些编译问题。 假设我有一个类Element,类Log 和另一个派生类Element 将其称为Rx。现在从Log 类我想访问class Element 公共方法。如果您认为我正在做的方式不是正确的方式,请提出一些方法来做到这一点。 我尝试的第一种方法是在Log 类中添加指向Element 类的指针,然后尝试访问该方法。 第二种方法我尝试将引用/指针传递给Log:initialize(Element *element) 类。 在下面添加代码sn-p。

方法一:

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;
}

方法二:

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: invalid use of non-static member function”,它在我试图访问e->add_handler的函数初始化中。

很想了解为什么会出现错误,如果您对此有任何建议。

现在对于非静态函数,该类没有任何内存,那么语句e->add_handler 是否指向任何内存?我假设不是,那么 compile 是如何解决的呢?

感谢大家的帮助。

【问题讨论】:

  • “错误:对非静态成员函数的无效使用”您的 sn-ps 中没有任何内容可能导致该错误。请编辑您的问题并添加minimal reproducible example
  • 发布的代码看起来不错,虽然有这个:class log record;——也许你的意思是把class Log record;改为? (顺便说一句,class 关键字可以省略,例如Log record; 将是更常见的语法)
  • “在两个代码中我都收到相同的错误“错误:非静态成员函数的无效使用””对于显示的代码仍然不正确。有人会得到有关无法访问的成员的信息。

标签: c++ c++11 compiler-errors


【解决方案1】:

add_handler() 没有在public: 下定义:-)

使用class 关键字和指定struct 时的public: 时,成员函数(也称为方法)默认为private:(即如果未指定任何内容)。

【讨论】:

  • 感谢您的回复,但这是公开的。我错过了。
猜你喜欢
  • 1970-01-01
  • 2011-09-14
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
相关资源
最近更新 更多