我的以下代码有此错误
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。