我的以下代码有此错误



AnotherFoo.hpp

struct AnotherFoo {
    void methodAnotherFoo(Foo &);
};

AnotherFoo.cpp
#include "Foo.hpp"
#include "AnotherFoo.hpp"

void AnotherFoo::methodAnotherFoo(Foo &foo) {
    // here i want to save the function pointer of methodPimpl(), std::function for ex:
    std::function<void(void)> fn = std::bind(&Foo::Pimpl::methodPimpl, foo._pimpl); // <-- Here i am getting the error
}

Foo.hpp
struct Foo {
    Foo();
    class Pimpl;
    std::shared_ptr<Pimpl> _pimpl;
};

Foo.cpp
#include "Foo.hpp"

struct Foo::Pimpl {
    void methodPimpl(void) {}
};

Foo::Foo() : _pimpl(new Pimpl) {}

main.cpp
#include "Foo.hpp"
#include "AnotherFoo.hpp"

int main() {
    Foo foo;
    AnotherFoo anotherFoo;
    anotherFoo.methodAnotherFoo(foo);
}

有谁有解决此问题的好方法?

我要实现的主要目标是将methodAnotherFoo方法的签名隐藏在头文件中。

最佳答案

可以访问Foo::Pimpl的详细信息的唯一文件是Foo.cpp,它是在其中定义的文件。

您可能无法在AnotherFoo.cpp中访问它。

您的选择是:

  • AnotherFoo::methodAnotherFoo的实现更改为仅使用Foo的公共(public)接口(interface)。
  • AnotherFoo::methodAnotherFoo的实现移至Foo.cpp。
  • 10-07 13:35