- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 Boost.Filesystem 库遍历目录。
问题是当我尝试实例化一个路径对象时,我得到一个 std::length_error 消息“string too long”和任何长度的字符串,例如“pippo”。
我已经尝试了所有这些:
string s = "pippo";
path p(s);
path p(s.begin(), s.end());
path p(s.c_str());
path p("pippo");
我在 Windows 7 上使用 boost 预编译版本 1.47 for vc++10。
先谢谢你,卢卡
编辑
这是执行的 boost 代码(path.hpp 第 129 行)
template <class Source>
path(Source const& source,
typename boost::enable_if<path_traits::is_pathable<
typename boost::decay<Source>::type> >::type* =0)
{
path_traits::dispatch(source, m_pathname, codecvt());
}
错误是从(path_traits.hpp line 174)抛出的
template <class U> inline
void dispatch(const std::string& c, U& to, const codecvt_type& cvt)
{
if (c.size())
convert(&*c.begin(), &*c.begin() + c.size(), to, cvt);
}
抛出的函数是“convert”。从调试器我看到这两个
&*c.begin()
和
&*c.begin() + c.size()
正确执行
最佳答案
您提到 Boost 是为 VC++10 预编译的,但您没有说明您使用的是哪个编译器。如果您使用的是 Visual C++ Express,则需要自行编译。
但是,由于我即将使用 boost::filesystem,我想我应该自己研究一下以学习一些知识。
首先,您几乎不应该尽可能将整个 Boost 命名空间放入您的普通命名空间中(尤其是当您使用 std 这样做时!)。像这样发布代码会让您看起来“使用 namespace ”太多了。如果你不想在任何地方输入 boost::filesystem,这样做:
namespace fs = boost::filesystem;
fs::path p(whatever);
或
using boost::filesystem::path;
using std::string;
string foo("Hello!");
path p(foo);
在您的本地命名空间中包含 Boost 命名空间,就像您看起来那样可能会产生灾难性的后果(或者工作正常,这是平局的运气)。正如您所注意到的,杀死它的函数调用是 convert() - 是否有另一个 convert() 取代它?
接下来,您应该启用自动链接(为此库)。 Boost 官方文档说要使用自动链接。 Boost 人员非常聪明(也许太聪明了 - 使用时间库很痛苦......)它适用于 Visual Studio 2010。
如果这不能解决问题,则您的预编译 Boost 使用了不同的 CRT(因为转换函数似乎在 Boost 库中)。发生这种情况的原因有很多,例如,VS2k10 服务包可能安装在您的源上/不在您的源上,等等。
最终的解决办法是自己编译Boost。在 Windows 上非常非常简单:下载 Boost 源代码,然后解压到任何目录。然后打开命令提示符(开始->运行 cmd.exe)并执行:
cd\
cd "boost root directory"
boostrap
.\b2
然后在 Core 2 Duo 2.5GHz 上等待大约 45 分钟。它将生成具有正确 CRT 的 Boost 库。如果您仍然有问题,那么您的构建系统存在更深层次的错误,例如在使用 DLL CRT 时链接到静态 Boost 库(您应该将 DLL Boost 链接到 DLL CRT)。
关于c++ - boost filesystem::path 构造函数 std::length_error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8552909/
在我的应用程序中,我还使用了 C++/Boost 库。奇怪的是,所有崩溃日志都与 std::length_error() 有关。 谁能提供一些线索吗?欢迎任何评论。 124 Thread 8 Cras
我的程序由三个文件组成。 arithcard.hpp(头文件)、assign2.cpp(主程序)和arithcard.cpp(方法)。 在数组 cards 中,存储从文本文件读取的字符串。例如,car
这是我得到的错误: terminate called after throwing an instance of 'std::length_error' what(): basic_string::_
我不确定为什么会收到“std::length_error”。下面是我的代码: #include "受害者.hpp" #include "Room.hpp" #include "Item.hpp" #i
我正在尝试用 C++ 编写一个简单的 Hangman 游戏。游戏大部分工作,但有时当我调试它时,我得到异常 std::length_error。通常在用户输入选择后。由于 Stack Overflow
stringstream str(line, ios_base::in); while(!str.eof()){ string word; str >> word; std::
这是我在这里的第一篇文章。由于我是新手,这个问题可能很愚蠢。当显示以下错误消息时,我正在编写一段代码, 在抛出“std::length_error”的实例后调用终止 什么(): basic_strin
因此,我为作业编写了一个程序,内容是使用 IEEE 格式将 float 转换为科学基数 2。当我用程序在我的计算机上运行它时,教授让我们运行的测试通过了,但是当我收到作业时,他说程序在所有测试中都遇到
我收到以下异常。不确定是什么原因造成的。 有什么想法吗? 这是我的连接字符串: std::string brokerURI = "tcp://127.0.0.1:61613?wireFormat=st
这是我的方法之一,哈希有效且已正确分配,但在它退出功能之前,“blockHash”变为“”,这给了我上面的错误。 Block::Block(int index, const double amount
我正在使用 Boost Regex。我有以下代码(简化): bool search_for_match(const string& data) { boost::smatch results;
我用 SFML 开始了一个项目,我想在窗口标题上显示 fps 和勾号,但这不起作用: string title = to_string(frames) + " fps, " + to_string(
当我运行我的程序时,它因以下错误而崩溃: terminate called after throwing an instance of 'std::length_error' what(): basi
我正在 Tutorials Point 上使用 pthread 在 C++ 中学习多线程(它可能很旧,但我只需要一些东西来开始)。我稍微修改了代码: #include #include #incl
当编译器处于发布版本时,我收到标题中提到的运行时错误,而当它处于调试版本时,出现段错误。我做了一些研究,我发现这是因为我将字符串传递给 add 方法的方式。我不清楚,所以如果有人用简单的语言描述为什么
这是我的第一个 c++ 项目,因此可能会有初学者失败。还是要学很多东西。 我正在通过将连接的圆柱体与点云库相匹配来为树木(真正的户外树木)建模。在我的真实场景中,我检测到大约 3000 个圆柱体,我想
我正在尝试使用 Boost.Filesystem 库遍历目录。 问题是当我尝试实例化一个路径对象时,我得到一个 std::length_error 消息“string too long”和任何长度的字
在运行我的程序时出现此错误: terminate called after throwing an instance of 'std::length_error' what(): basic_s
我正在使用 SFML 对于我的项目,我目前正在关注网站上的教程。 目前我只完成了创建 RenderWindow 的第一步 使用以下代码(直接从教程粘贴): #include #include in
在浏览了之前就此主题提出的问题后,我并没有真正理解任何答案。我的助教试图帮助我解决这个问题大约一个小时,但无法解决任何问题。 首先,这是程序编译时出错的地方 在 xthrow.cpp 中 _CRTIM
我是一名优秀的程序员,十分优秀!