从私有struct数据成员访问C ++类公共成员函数

时间:2013-12-29 03:42:34

标签: c++ visual-studio-2010 access-specifier pimpl-idiom

这可能是一个微不足道的C ++语义问题,我想,但是我在Windows(VS2010)上遇到了这个问题。我有一个课程如下:

class A {
public:
   some_type some_func();
private: 
   struct impl;
   boost::scoped_ptr<impl> p_impl;
}

我想从some_func中定义的函数中访问函数struct impl,如下所示:

struct A::impl {
   impl(..) {} //some constructor
   ...
   some_impl_type some_impl_func() {
     some_type x = some_func(); //-Need to access some_func() here like this
   }
};

VS 2010上下文菜单显示错误,因此无需构建:

Error: A non-static member reference must relative to a specific object

如果无法获得公共成员职能,我会感到惊讶。关于如何解决这个问题的任何想法都值得赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

您需要A的实例。 A::impl是与A不同的结构,因此隐式this不是正确的实例。在构造函数中传入一个:

struct A::impl {
   impl(A& parent) : parent_(parent) {} //some constructor
   ...
   some_impl_type some_impl_func() {
     some_type x = parent_.some_func(); //-Need to access some_func() here like this
   }

   A& parent_;
};