Pet*_*aus 5 c++ module visual-c++
我正在将 C++ 图形应用程序从头文件迁移到模块。循环依赖问题(C++ 模块和循环类引用)已初步解决。但现在我陷入了一个稍微复杂一点的境地。我有一个包含三个分区的模块:Part1、PartBase 和 PartDerived。其中两个参与者(PartBase 和 Part1)具有相互依赖关系,可以通过前向声明来解决。另外,PartBase和PartDerived有继承关系。实际情况当然更复杂,但这是一个精简的配置,我可以在其中重现该问题。
export module Module:Part1;
// :import PartBase would create circular dependency
class PartBase; // forward declaration is ok
export class Part1
{
PartBase * pBase;
};
export module Module:PartBase;
import :Part1;
export class PartBase
{
Part1 * pPart1;
};
export module Module:PartDerived;
import :PartBase;
export class PartDerived : public PartBase {};
export module Module;
export import :Part1;
export import :PartBase;
export import :PartDerived;
Run Code Online (Sandbox Code Playgroud)
该模块编译没有任何问题。但是,当从外部客户端模块引用模块中定义的类时
import Module;
export class Client
{
PartDerived* pDerived;
PartBase* pPartBase;
};
Run Code Online (Sandbox Code Playgroud)
编译器在使用 PartBase 的行中报告错误:
“导入模块‘Module’时出现不可恢复的错误:符号‘PartBase’已被定义”
我使用 Microsoft Visual Studio Community 2022(64 位)- 版本 17.3.3。
我无法解释此消息并怀疑它是编译器错误。但我了解到,在指责工具之前最好先找出自己的错误。有人有想法吗?
看起来像是编译器错误,但确实很难验证,因为所有编译器都存在模块错误。
使用当前的编译器,我可以将前向声明导出为:Part1:
export class PartBase; // forward declaration is ok
export class Part1
{
PartBase * pBase;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |