不能在 C++20 中同时导入 sstream 和 iostream?

问题描述 投票:0回答:2

在 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
变量)

编译良好如果我:

  1. #include <sstream>
    import <iostream>;
    ,或
  2. #include <iostream>
    import <sstream>;
    ,或
  3. #include <iostream>
    #include <sstream>;
    .

但我不能同时

import <iostream>;
import <sstream>;

谁能解释为什么,或者知道如何导入两者?我怀疑这与两者之间的依赖关系有关,但我不确定。

c++ c++20 iostream sstream
2个回答
0
投票

这显然是 Visual Studio 中的错误,特别是 IntelliSense。请注意,那里的模块支持仍然不完整,因此在修复之前您必须使用 includes。在 C++23 中,您还可以执行

import std
.


0
投票

我测试了 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
-> 是的。

© www.soinside.com 2019 - 2024. All rights reserved.