C++ MSVC:C++;20个相互导入的模块无法编译

C++ MSVC:C++;20个相互导入的模块无法编译,c++,visual-studio,visual-c++,c++20,c++-modules,C++,Visual Studio,Visual C++,C++20,C++ Modules,对C++20模块的支持最近得到了改进。如果我没有弄错的话,使用模块的优点之一是现在支持循环导入依赖项。但是,以下测试项目仍然无法在最新版本的Microsoft编译器中编译 computer.ixx export module computer; import printer; export struct Computer { Printer* printer; }; export module printer; import computer; export struct Pr

对C++20模块的支持最近得到了改进。如果我没有弄错的话,使用模块的优点之一是现在支持循环导入依赖项。但是,以下测试项目仍然无法在最新版本的Microsoft编译器中编译

computer.ixx

export module computer;

import printer;

export struct Computer {
    Printer* printer;
};
export module printer;

import computer;

export struct Printer {
    Computer* computer;
};
printer.ixx

export module computer;

import printer;

export struct Computer {
    Printer* printer;
};
export module printer;

import computer;

export struct Printer {
    Computer* computer;
};
main.cpp

import computer;
import printer;

int main() {
    Computer* c = new Computer();
    Printer* p = new Printer();
    p->computer = c;
    c->printer = p;
}
尝试编译此代码会导致:
MultiToolTask遇到问题计划任务,因为一个或多个任务仍然存在,但无法启动。请检查输入及其依赖性,以避免循环。
(打字错误逐字复制)并混淆IntelliSense、挂起甚至崩溃Visual Studio

我还尝试反转导入和导出行的顺序,但没有解决问题

我知道这仍然是一个beta版的特性,但我想确保我的假设是正确的(这段代码应该可以工作),如果代码中有任何错误,我应该修改它才能工作

如果您想亲自尝试,可以在此处找到包含上述代码的MSVC项目:

如果我没有弄错的话,使用模块的优点之一是现在支持循环导入依赖项

我不知道有任何版本的模块提案、标准或实现支持循环依赖关系。在几乎所有版本的模块中,作为一个概念,甚至可以追溯到C++11之前的迭代,模块依赖关系图始终被要求是一个有向无环图

这根本就没有道理。如果您导入一个模块,那么根据定义,您需要先编译该模块,然后才能编译导入该模块的模块。但是,如果该模块也需要您的模块,则没有编译模块的顺序。你不能只是“有点”现在编译一个模块,然后等待其他东西出现来填补空白或其他东西。C++不这样工作。< /P> 如果我没有弄错的话,使用模块的优点之一是现在支持循环导入依赖项

我不知道有任何版本的模块提案、标准或实现支持循环依赖关系。在几乎所有版本的模块中,作为一个概念,甚至可以追溯到C++11之前的迭代,模块依赖关系图始终被要求是一个有向无环图


这根本就没有道理。如果您导入一个模块,那么根据定义,您需要先编译该模块,然后才能编译导入该模块的模块。但是,如果该模块也需要您的模块,则没有编译模块的顺序。你不能只是“有点”现在编译一个模块,然后等待其他东西出现来填补空白或其他东西。C++不工作,模块/A模块的实现单元可以是<代码>导入B;代码>和
导入一个分别,但不包括接口单元。在这里,您必须组合模块(因为没有其他模块,两者都没有意义)
导入一个分别,但不包括接口单元。在这里,您必须组合模块(因为没有另一个模块,两者都没有意义)。这是有意义的,因为Java、C#和许多其他语言都支持这一点,但如果您说提案中从未包含这一点,那么这就回答了我的问题。我仍然认为Visual Studio不应该崩溃。@AlbertVaccatora:是的,它不应该崩溃,但这是一个编译器/构建系统错误。这是有道理的,因为Java、C#和许多其他语言都支持它,但如果你说提案中从未出现过这种情况,那么这就回答了我的问题。我仍然认为VisualStudio不应该崩溃。@AlbertVaccatora:是的,它不应该崩溃,但这是一个编译器/构建系统错误。