【问题标题】:Code::Blocks 13.12 on Windows not recognizing std::codecvt even with -std=c++11即使使用 -std=c++11,Windows 上的 Code::Blocks 13.12 也无法识别 std::codecvt
【发布时间】:2015-02-16 15:16:42
【问题描述】:

我正在 Windows 8.1 上的 Code::Blocks 13.12 上使用 ofxTrueTypeFont 编译一个 openFrameworks 项目,使用 mingw32-g++ 版本 4.8.1。

它以一个错误结束:

...\ofxTrueTypeFontUC.cpp | fatal error: codecvt: No such file or directory

我什至在编译器标志中打开了-std=c++11Here 的人有类似的问题,显然还没有找到解决方法。

我应该如何编译?同时我会尝试更新mingw32-g++...

编辑:

似乎 4.8.1 是最新版本...即使那里有 gcc-5.0.0。

【问题讨论】:

  • 我在 Windows 上有 v4.9.2rev3。它仍然没有编解码器。事实上,标题甚至不存在。在旧版本中,它至少曾经存在但不起作用。最多你会找到codecvt.h,但这是一个内部 gcc 标头,它说不要直接包含它。即使你这样做了,像std::wstring_convert 这样的函数也不存在。你在 Windows 上一如既往地不走运。您必须使用 MSVC。 MSVC 还包含filesystem,这是一件好事。除了这两个,我使用 GCC。
  • @Brandon 我想我会选择 MSVC...
  • mingw-w64 是 4.9.2(至少),旧的 mingw32 没有正确维护

标签: c++ c++11 g++ codeblocks


【解决方案1】:

不是真正的答案,但欢迎来到现实生活。理论上,应该有一个单一的 C++ 引用,版本(C+11、C+14、...),并且所有编译器都应该遵循这一点,允许指定的所有内容并禁止其他所有内容。

在现实世界中,编译器可以拒绝规范允许的构造并接受规范不允许的其他构造。众所周知,2010 年之前的 MSVC 非常不愿意采用标准,gcc 以允许大量扩展而闻名,看起来你发现了一个地方,它没有完全实现 C++11 规范。

您可以尝试其他可以接受您输入代码的编译器,也可以像上个世纪的老 C 程序员所做的那样:找到适合您的开发环境的正确包含文件。也许#include <locale> 就足够了……

顺便说一句,问题不完全在编译器部分,而是在标准库实现中......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2015-08-16
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多