c++ - C2027: 使用未定义类型 Foo::Impl

标签 c++

全部,

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/

相关文章:

c++ - 对运算符<< 的 undefined reference

html - POCO HTMLForm 如何读取名称为 invoice[items][1] 的输入表单元素

c++ - 语言扩展和新关键字

c++ - 为什么使用带有自定义比较器的 std::sort 无法编译?

c++ - 将 unsigned char 数组的元素作为整数访问

c++ - 二维数组CUDA问题

c# - 将屏幕坐标转换为复数坐标

c++ - IAudioSessionNotification,有人有工作代码吗?

c++ - 使用操作系统定义的默认文件对话框的 QFileDialog 替代方案?

c++ - 没有匹配的调用函数(期望引用指针而不是指针)