【问题标题】:How to call object of a function in one class in another class?如何在另一个类中调用一个类中的函数对象?
【发布时间】:2025-12-10 06:50:01
【问题描述】:

我在 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 实例才能从该方法中获取结果。

标签: c++ function class oop


【解决方案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 关系不是罪魁祸首。忘记这个“答案”