小编Ian*_*ook的帖子

包含涉及模板类和友元类的类层次结构的 C++ 模块代码出错

我在编写的一些基于模块的 C++ 代码中遇到“基类未定义”错误。我已将其简化为以下 MCVE。非模块等效项可以很好地编译。我不明白为什么这里的模块化代码会失败。请有人解释一下为什么我会收到错误,以及如果可能的话如何修复它。

这是模块接口单元 -

// mcve.ixx

export module mcve;

export class X
{
    friend class F; // (1)
};

export
template<typename T>
class A
{
};

export class B: public A<X>
{
};

// (2)
export class F: public B
{
};
Run Code Online (Sandbox Code Playgroud)

以及显示报告编译器错误的位置的 cpp 文件。

// main.cpp

import mcve;

int main()
{
    // X x;     // (3)
    // A<X> ax; // (4)
    // F f;     // (5)
    B b;        // error C2504: 'B': base class undefined
}
Run Code Online (Sandbox Code Playgroud)

有趣的是,删除 …

c++ visual-c++ c++20 c++-modules visual-studio-2022

7
推荐指数
1
解决办法
227
查看次数

标签 统计

c++ ×1

c++-modules ×1

c++20 ×1

visual-c++ ×1

visual-studio-2022 ×1