使用boost库编译C++代码的问题

4
我正在尝试编译 (Thomas Pevny的源代码,用于计算减法像素邻接矩阵)。该代码要求先安装libboost和libpng库,我已经成功完成了安装。
但是当我执行'make'命令时,终端上出现了以下错误。
spam.cpp:169:26: error: ‘class boost::filesystem3::directory_entry’ has no member named ‘leaf’
spam.cpp:179:20: error: ‘class boost::filesystem3::path’ has no member named ‘native_file_string

有没有办法解决这个问题?我需要安装另一个libboost版本吗?谢谢关注。
3个回答

6

我通过将native_file_string替换为file_string()来纠正第二个错误,但是当我用path().filename()替换leaf()时,又出现了另一个错误。代码片段如下:string fileName=file->path().filename(); //之前是file->leaf()。 - mad
错误大概是这样的:spam.cpp:168:42: 错误:需要将‘boost::filesystem3::path’转换为非标量类型‘std::string {aka std::basic_string<char>}’ - mad
再次感谢salgar。但是我希望代码能够独立于文件名运行(我不想直接在代码中指定文件名)。有没有好的方法可以更改这段代码?再次感谢。 - mad
这段代码是 string fileName=file->path().filename()。我应该将 file->path().filename() 转换为字符串吗? - mad

2

谢谢你的回复。我通过将native_file_string替换为file_string()来纠正了第二个错误,但是当我将leaf()替换为path().filename()时,出现了另一个错误。代码片段如下:string fileName=file->path().filename(); //之前是file->leaf()。变量file是一个目录迭代器。错误是这样的:spam.cpp:168:42: error: conversion of ‘boost::filesystem3::path’ to non scalar type ‘std::string {aka std::basic_string<char>}’ required - mad
1
path.filename() 不是 String 类型,而是 path 类型。如果你想从中获取 String,可以尝试使用 native() (path.filename().native())。 - Jean-Baptiste Yunès
再次感谢您的回复。现在我遇到了以下错误:spam.cpp:168:30: error:‘((boost::iterator_facade<boost::filesystem3::directory_iterator, boost::filesystem3::directory_entry, boost::single_pass_traversal_tag>*)(& file))->boost::iterator_facade<I, V, TC, R, D>::operator-><boost::filesystem3::directory_iterator, boost::filesystem3::directory_entry, boost::single_pass_traversal_tag, boost::filesystem3::directory_entry&, long int>()->boost::filesystem3::directory_entry::path’没有类类型。我会继续努力修复它,再次感谢您。 - mad

0
问题已经通过@Salgar和@Jean-Baptiste Yunès的建议解决,并且在makefile中添加了-lboost_system在-lboost_filesystem之后。谢谢大家。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接