全部,
class __declspec(dllexport) MyClass
{
protected:
struct Impl;
Impl *pimpl;
public:
Impl &GetStruct() { return pimpl; }
const std::wstring &GetName() { return pimpl->m_name; };
};
struct MyClass::Impl
{
std::wstring m_name;
};
GetName() 抛出错误而 GetStruct() 没有抛出错误是否有原因?以及如何修改代码才能编译?
TIA!!
最佳答案
问题是 C++ 解析器是从上到下工作的。在 MyClass
声明的末尾,嵌套的 Impl
尚未完全定义。它被声明(“有一个 struct Impl”)但完整的定义(“struct Impl 看起来如下......”)只是稍后才出现。然而,为了为 pimpl->m_name
生成代码,编译器需要知道更多,特别是它需要知道 m_name
是什么类型以及它的偏移量是多少包含 Impl
它位于。
简而言之,您偶然发现了 PIMPL 习惯用法的一个众所周知的限制,即您不能像习惯那样使用内联函数。
关于c++ - C2027: 使用未定义类型 Foo::Impl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52417960/