4

我正在尝试 Visual Studio 2017 版本 15.4.4 中模块的实验性实现。我按照这里描述的说明https://blogs.msdn.microsoft.com/vcblog/2017/05/05/cpp-modules-in-visual-studio-2017/。我能够在控制台应用程序中快速运行它。

import std.core;
int main()
{
   std::cout << "Hello modules!" << std::endl;
   return 0;
}

导入和使用可用的标准模块不是问题(据我所知)。

但是,当我定义自己的模块时,没有任何效果。我添加了一个文件system.ixx(项目类型 C/C++ 编译器),内容如下:

import std.core;
export import system.io;

export struct console
{
   void write(std::string_view text) { std::cout << text; }
   void write_line(std::string_view text) { std::cout << text << std::endl; }   
};

当我添加import system.iomain.cpp

import std.core;
import system.io;

int main()
{
   std::cout << "Hello modules!" << std::endl;
   return 0;
}

我收到以下错误:

1>system.ixx
1>system.ixx(2): error C2230: could not find module 'system.io'
1>main.cpp
1>main.cpp(2): error C2230: could not find module 'system.io'

我还添加/module:reference system.io.idf 了编译器选项,但没有从system.ixx生成system.io.idf文件。

我知道这是实验性的并且有很多问题,但我想知道我应该做些什么来让这个简单的事情发挥作用。

4

1 回答 1

0

system.ixx,尝试更改export import system.ioexport module system.io。您还需要确保export module ...声明出现在文件的顶部。于是system.ixx变成:

export module system.io;
import std.core;

export struct console
{
   void write(std::string_view text) { std::cout << text; }
   void write_line(std::string_view text) { std::cout << text << std::endl; }   
};
于 2020-12-04T09:55:43.517 回答