如何在另一个类中调用一个类中的函数对象?

Posted

技术标签:

【中文标题】如何在另一个类中调用一个类中的函数对象?【英文标题】:How to call object of a function in one class in another class? 【发布时间】:2016-11-07 02:35:32 【问题描述】:

我在 ADialog 类中有一个函数,它有一个用户输入 x11,我想在 BDoc 类中调用一个函数。怎么做?

.h file
#ifndef A_DIALOG_H
#define A_DIALOG_H

class ADialog : public wxDialog

public:
      ADialog(wxWindow* parent, wxWindowID id, int click);
      wxTextCtrl *d_x1;
      void setAData();  
;
#endif

.cpp 文件的一部分

void ADialog::setAData()

    double x11; 
    d_x1->GetValue().ToDouble(&x11);    

.cpp 文件的一部分

void BDoc::ATCut()

    //(get the value of x11 that user inputs in this part)

【问题讨论】:

我在ADialog 中没有看到任何方法。 setAData() 不是成员函数吗? 在类声明中没有这样声明。我不知道是public 还是private。是static还是不是?你能发布完整的课程吗? 哦好的抱歉,它是公开的,我会编辑它 因为不是static,所以需要BDoc 中的ADialog 实例才能从该方法中获取结果。 【参考方案1】:

在你的调用者类BDoc中包含ADialog类头,然后调用SetAData()

ADialog obj;
obj.SetAData();

您可以根据需要修改SetAData() 以返回x11

【讨论】:

我这样做了,但后来 x11 无法访问 我不能改变类型,它是无效的。我的意思是改变类型意味着改变更多的东西,所以我想知道是否有任何其他方式 @Leo001 将x11 作为成员变量并通过公共接口访问它怎么样? @Leo001 你能直接通过d_x1BDoc 中获得x11 吗? 非常感谢我刚刚找到了一种方法,方法是在另一个类中声明一个指针,然后在 ADialog::setAData aswxGetApp().getPattern()->xc1=x11 中调用它【参考方案2】:

让 ADialog 类成为 BDoc 类的朋友。这样你就可以很方便的访问BDoc类中的ADialog类函数了。

【讨论】:

@Leo001 所以缺少friend 关系不是罪魁祸首。忘记这个“答案”

以上是关于如何在另一个类中调用一个类中的函数对象?的主要内容,如果未能解决你的问题,请参考以下文章

在另一个类中做数据成员的对象,可以先不初始化

C ++:如何访问另一个类中的类函数?

如何在另一个类中调用列表对象

如何在另一个类中使用带有构造函数的类?

c# Unity - 如何在另一个类中调用结构对象数组

如何在 C++ 中的类中递归调用函数方法?