如何从包含在类中的成员访问包装类的成员

时间:2012-08-16 08:51:35

标签: c++ wrapper

对于前。我有: “wrapper.h”

class wrapper : public QWidget
{
    Q_OBJECT
    public:
    Wrapped_class m_class;

    private:
    QTimer* m_timer;
}

“Wrapped_class.h”

class Wrapped_class
{
public:
Wrapped_class();
public slots:
f(); // slot which is called when m_timer send signal timeout()

}

“Wrapped_class.cpp”

Wrapped_class::Wrapped_class()
{
QOBject::connect(wrapper::m_timer, SIGNAL(timeout()), this, SLOT( f()))
}

我收到错误的包装器:: m_timer无法访问

4 个答案:

答案 0 :(得分:1)

您需要班级pointerreference才能访问其non static成员。在被包装的类被包裹时将pointer传递给

将这样的内容添加到Wrapped_class

void Wrapped_class::setWrapper(wrapper *w)
{
    m_wrapper = w;
}

并在包装对象时调用此函数。在构造函数

中将m_rapper初始化为nullptr

答案 1 :(得分:1)

根据您的意图和系统设计,您可以选择:

  1. 将“wrapper”类的指针或引用传递给“wrapped”类。要有用,您必须将包装类定义为friend才能访问private成员。
  2. 编写“wrapper”类的成员函数来处理两个类之间的交互。 (这并不符合您的限制,但它是一种设计选择。)

答案 2 :(得分:0)

m_timer不是静态成员,因此您无法像这样访问它。在Wrapped_class.cpp中,您需要包装类的实例才能使用它

答案 3 :(得分:0)

除了wrapper::m_timer不是静态的问题,它也是私有,这意味着Wrapped_class无法访问它。您需要让Wrapped_classwrapper的朋友才能访问私人会员。