从另一个类调用不同类的成员函数

时间:2011-02-13 20:13:30

标签: c++ function

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

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

B::memberFunctionOfB(temp);  // the way i tried
}

编辑报告错误。我也尝试了

B obj;
obj.memberFunctionOfB(temp);

两者都给了我无法调用memberFunctionOfB的错误。任何人都可以告诉我我错过了什么

修改

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

2 个答案:

答案 0 :(得分:3)

你的第二次尝试:

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

答案 1 :(得分:1)

看到你的评论后:

  

编译器抛出“No matching function call B :: B()”

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

因此,要么为类添加默认构造函数,要么在创建实例时将参数传递给构造函数。