【问题标题】:calling a member function of different class from another class从另一个类调用不同类的成员函数
【发布时间】:2011-02-13 20:13:30
【问题描述】:

我有两个类 A 和 B。控件位于类 A 的成员函数之一中。成员函数计算结果,我现在想将此值发送给 B 类的成员函数之一,我试过了以下方式,但它仍然有效

int memberFunctionOfA() { ... //结果存储在一些临时值中,比如 temp B::memberFunctionOfB(temp); // 我尝试的方式 }

编译器报告错误。我也试过了

乙对象; obj.memberFunctionOfB(temp);

两者都给了我无法调用 memberFunctionOfB 的错误。谁能告诉我我错过了什么

编辑

B 类不是从 A 继承的。它们都是独立的。两个成员函数都是公共的和非静态的

【问题讨论】:

  • 告诉我们编译器显示的确切错误。
  • @CHID 我不明白 memberFunctionOfB 是静态函数吗?
  • B 类的声明在这里会有很大帮助。如果 A 从 B 继承(或相反),则 A 类的声明也会有所帮助。首先猜测,我会说memberFunctionOfB 是私有的/受保护的,但是如果没有看到代码就很难确定。
  • @CHID:该特定错误意味着您的 B 类没有默认构造函数。如果你想创建一个 B,你需要提供参数——比如B obj(42, "These are sample args"); 而不仅仅是B obj;。查看 B 类的代码,找出它的构造函数期望什么。
  • 编译器说你的 B 类没有默认构造函数,这是在堆栈上创建对象所必需的,就像你在这里做的那样:B obj;

标签: c++ function


【解决方案1】:

您的第二次尝试:

int memberFunctionOfA()
{
... //results are stored in some temporary value, say temp

    B obj;
    obj.memberFunctionOfB(temp);
}

...,看起来完全有效。我们将需要 B 的定义来进一步提供帮助。 B 的定义至少应该有,假设 B 中的成员函数是非静态的:

class B
{
public:
  void memberFunctionOfB(const TypeOfTemp &temp);
};

// Later in class A's definition
class A
{
public:
  int memberFunctionOfA()
  {
    ... //results are stored in some temporary value, say temp

    B b;
    b.memberFunctionOfB(temp);
  }
};

如果 B 中的成员函数是静态的,那么这应该可以工作:

class B
{
public:
  static void memberFunctionOfB(const TypeOfTemp &temp);
};

...

class A
{
public:
  int memberFunctionOfA()
  {
    ... //results are stored in some temporary value, say temp

    B::memberFunctionOfB(temp);
  }
};

【讨论】:

    【解决方案2】:

    看到你的评论后:

    编译器抛出“没有匹配的函数调用 B::B()”

    这意味着,B 类没有默认构造函数。在你的实现中,B 的构造函数必须带参数。

    因此,要么向你的类添加一个默认构造函数,要么在创建它的实例时将参数传递给你的构造函数。

    【讨论】:

    • 谢谢纳瓦兹。正如他们所指出的,我错过了默认构造函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多