【问题标题】:How can a project use wstring without including <string>?项目如何在不包含 <string> 的情况下使用 wstring?
【发布时间】:2021-09-14 16:26:15
【问题描述】:

一个现有的 C++ 项目在 VS2017 中构建良好,但在 VS2019 中,由于未定义符号 std::wstring 的错误而失败。 深入研究代码,&lt;string&gt; 从未包含在任何地方,但使用了std::wstring,这让我摸不着头脑曾经是如何构建的。

我碰巧在构建日志中发现了对corecrt_wstring 的引用。谷歌没有给我太多解释,但我在这里找到了参考:https://github.com/tpn/winsdk-10/blob/master/Include/10.0.14393.0/ucrt/corecrt_wstring.h

Platform SDK 中是否提供了一些奇怪的 STL 版本或其他原因?

【问题讨论】:

  • "&lt;string&gt; 永远不会包含在任何地方" 在应用程序代码中。很可能它包含在首次编写代码的系统上的某个其他系统头文件中。 C++ 不限制系统头文件包含其他头文件,但依赖它肯定会使您的代码不可移植。
  • @BenVoigt 您是说 Windows 标头可能包含 STL 文件吗?我所做的只是将 VS2017 项目重新定位到同一台 PC 上的 VS2019
  • Windows 头文件是 C 头文件,它们永远不会包含 C++ STL。但 C++ 程序不太可能不包含 any STL 标头,无论是直接还是通过某些 3rd-party 标头。
  • 我的 VS2017 版本的 &lt;vector&gt; 包括 &lt;stdexcept&gt;,其中包括 &lt;xstring&gt; 和一大堆其他东西。
  • 如果您能够在自己的项目中遵循包含链,那么您将能够最好地编写自己的答案。您可能还想引用eel.is/c++draft/res.on.headers#1,这是标准表达我在第一条评论中所说的想法的方式。

标签: c++ windows visual-studio stl


【解决方案1】:

这确实归功于 Ben 的提示,但事实证明 &lt;vector&gt; 导致 &lt;string&gt; 包含在 VS2017 版本中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-19
    • 2016-09-23
    • 2014-09-19
    • 2017-09-27
    • 1970-01-01
    • 2018-04-09
    • 2011-07-04
    • 2019-07-09
    相关资源
    最近更新 更多