gpt4 book ai didi

c++ - boost filesystem::path 构造函数 std::length_error

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:36 27 4
gpt4 key购买 nike

我正在尝试使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com