Это может быть тривиальный вопрос о семантике 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
Я был бы удивлен, если бы не было доступа к функции публичного участника. Любые идеи о том, как обойти это, оценивают. Благодарю!
Вам нужен экземпляр 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_;
};