我正在研究在我的宠物项目中使用C ++ Modules TS的机会。对我来说,一个重要的用例是包装遗留标题。
假设我有一个带有一些函数和类的头文件, std.io.ixx :
Cannot read property 'scrollHeight' of undefined.
根据this article,我使用以下命令编译模块:
$('#fullpage').fullpage({
sectionsColor: ['yellow', 'orange', '#C0C0C0', '#ADD8E6'],
scrollOverflow: true
});
$('.fp-scrollable').slimScroll({
alwaysVisible: true,
color: 'black',
size: '10px',
allowPageScroll: true,
});
这给了我一个新文件int f(int x)
{
return 2 + x;
}
。然后我在另一个源文件 main.cxx :
cl /c /experimental:module /module:name std.io /module:export std.io.ixx
使用以下命令编译:
std.io.ifc
编译给出了以下错误:
import std.io;
int main()
{
f(5);
}
因此,正如我们所看到的,模块中的标识符未被导出。我可以通过在我要导出的每个标识符之前手动添加cl /c /experimental:module main.cxx
关键字来解决此问题,但这对于包装旧标头的用例是不可能的。
我做错了什么?如何从标题中导出所有可能的标识符?
答案 0 :(得分:1)
我认为有两件事是错的:
模块名称不得以std.
开头。当我试图这样做时,我收到了错误
error C3674: could not find standard library module 'std.io'
如果尚未安装Visual Studio的标准库模块组件,则可能不会出现此错误。不过,我对此并不确定。
在您关联的博文中,有这样的说明:
请注意,由于编译器文件处理方面的限制,您目前必须在.cpp文件中包含标题(或重命名标题)。
确实是这种情况,因为当我尝试使用扩展程序ixx
时,我遇到了与您相同的错误。
但在解决了上述两个问题之后,它运作良好。