在 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 无接线员“<<" matches these operands
E3365 不完整的类类型“std::basic_stringstream
, std::allocator >”是不允许的
和以下信息:
局部变量未初始化
(指
ss
变量)
编译良好如果我:
#include <sstream>
和import <iostream>;
,或#include <iostream>
和import <sstream>;
,或#include <iostream>
和#include <sstream>;
.但我不能同时
import <iostream>;
和import <sstream>;
。
谁能解释为什么,或者知道如何导入两者?我怀疑这与两者之间的依赖关系有关,但我不确定。
这显然是 Visual Studio 中的错误,特别是 IntelliSense。请注意,那里的模块支持仍然不完整,因此在修复之前您必须使用 includes。在 C++23 中,您还可以执行
import std
.