2011-02-13 92 views
3

我有两个类A和B.该控件位于类A的成员函数之一内。成员函数计算结果,现在我想将此值发送给一个B类的成员函数,我尝试以下方法,但它力的工作调用另一个类的不同类的成员函数

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

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

的comiler报告错误。我也试过像

 
B obj; 
obj.memberFunctionOfB(temp); 

两个都给我错误,memberFunctionOfB不能被调用。谁能告诉我,我失去了什么

编辑

B类未从继承A.他们俩是独立的。这两个成员函数是公共和非静态

+3

告诉我们编译器显示的确切错误。 – Nawaz 2011-02-13 20:16:58

+0

@CHID我不明白memberFunctionOfB是静态函数吗? – UmmaGumma 2011-02-13 20:18:19

+0

B类的声明在这里会有很大帮助。如果A从B继承(或者相反),A类的声明也会有帮助。首先猜测,我会说`memberFunctionOfB`是私人/受保护的,但很难说没有看到代码。 – cHao 2011-02-13 20:20:45

回答

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

看到您的评论后:

编译器会引发 “无匹配的函数调用B :: B()”

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

因此,无论是为您的类添加默认构造函数,还是在创建实例时将参数传递给您的构造函数。

相关问题