【发布时间】:2021-09-14 16:26:15
【问题描述】:
一个现有的 C++ 项目在 VS2017 中构建良好,但在 VS2019 中,由于未定义符号 std::wstring 的错误而失败。
深入研究代码,<string> 从未包含在任何地方,但使用了std::wstring,这让我摸不着头脑曾经是如何构建的。
我碰巧在构建日志中发现了对corecrt_wstring 的引用。谷歌没有给我太多解释,但我在这里找到了参考:https://github.com/tpn/winsdk-10/blob/master/Include/10.0.14393.0/ucrt/corecrt_wstring.h
Platform SDK 中是否提供了一些奇怪的 STL 版本或其他原因?
【问题讨论】:
-
"
<string>永远不会包含在任何地方" 在应用程序代码中。很可能它包含在首次编写代码的系统上的某个其他系统头文件中。 C++ 不限制系统头文件包含其他头文件,但依赖它肯定会使您的代码不可移植。 -
@BenVoigt 您是说 Windows 标头可能包含 STL 文件吗?我所做的只是将 VS2017 项目重新定位到同一台 PC 上的 VS2019
-
Windows 头文件是 C 头文件,它们永远不会包含 C++ STL。但 C++ 程序不太可能不包含 any STL 标头,无论是直接还是通过某些 3rd-party 标头。
-
我的 VS2017 版本的
<vector>包括<stdexcept>,其中包括<xstring>和一大堆其他东西。 -
如果您能够在自己的项目中遵循包含链,那么您将能够最好地编写自己的答案。您可能还想引用eel.is/c++draft/res.on.headers#1,这是标准表达我在第一条评论中所说的想法的方式。
标签: c++ windows visual-studio stl