所有,
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
尚未完全定义。它被声明(“有一个Impl结构”),但是完整的定义(“ Impl结构如下……”)仅在以后出现。但是,为了生成pimpl->m_name
的代码,编译器需要了解更多,尤其是需要知道m_name
是什么类型,以及它所在的包含Impl
的偏移量。
简而言之,您偶然发现了PIMPL惯用语的一个著名限制,即您不能像以前那样使用内联函数。
关于c++ - C2027:使用未定义的类型Foo::Impl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52417960/