提问人:Todd Burch 提问时间:4/26/2023 最后编辑:Remy LebeauTodd Burch 更新时间:5/3/2023 访问量:439
无法在 C++ 20 中同时导入 sstream 和 iostream?
Can't import both sstream and iostream in C++20?
问:
在 Visual Studio 2022 中创建新的空 C++ Windows 控制台应用程序。
添加一个“main.cppm”文件,并用以下命令填充它:
import <sstream>;
int main()
{
std::stringstream ss;
ss << "Hey world!";
return 0;
}
它应该编译并运行良好(尽管它没有做任何有用的事情)。
现在将其注释掉并将代码更改为:
//import <sstream>;
import <iostream>;
int main()
{
std::cout << "Hello world!" << std::endl;
//std::stringstream ss;
//ss << "Hey world!";
return 0;
}
同样,它编译并运行良好,我们在控制台上看到“Hello world!
但现在取消注释行:
import <sstream>;
import <iostream>;
int main()
{
std::cout << "Hello world!" << std::endl;
std::stringstream ss;
ss << "Hey world!";
return 0;
}
这将不会编译,并给出以下错误:
不允许 E0070 不完整类型
(指stringstream
)
E0349 没有运算符“<<”与这些操作数匹配
不允许 E3365 不完整的类类型“std::basic_stringstream<char、std::char_traits<char>、std::allocator<char>>”
以及以下消息:
局部变量未初始化
(指变量)ss
如果我:
#include <sstream>
和 ,或import <iostream>;
#include <iostream>
和 ,或import <sstream>;
#include <iostream>
和。#include <sstream>;
但我不能同时。import <iostream>;
import <sstream>;
谁能解释为什么,或者知道如何导入两者?我怀疑这与两者之间的依赖关系有关,但我不确定。
答:
这显然是 Visual Studio(特别是 IntelliSense)中的一个 bug。请注意,那里的模块支持仍然不完整,因此在修复之前,您必须使用包含。在 C++23 中,您还可以执行 .import std
评论
cl.exe
我使用 MSVC 2022 版本 17.5.4 和 17.6.0 预览版 5.0。
编辑:IDE表示,C++ IntelliSense对C++20模块的支持目前处于实验阶段。
代码编译并运行。
Scan Sources for Module Dependencies
需要为“是”。
您可以按如下方式更改此选项:
菜单 -> 项目 -> 属性 ->
配置属性 -> C/C++ -> 所有选项 -> -> 是。Scan Sources for Module Dependencies
评论
import
#include