帮我调试这个-C++;促进 我是C++的Boost。这里有人能帮我调试这个程序吗 #include <iostream> #include <boost/filesystem/operations.hpp> #include <boost/filesystem/fstream.hpp> using namespace boost::filesystem; using namespace std; void show_files( const path & directory, bool recurse_into_subdirs = true ) { if( exists( directory ) ) { directory_iterator end ; for( directory_iterator iter(directory) ; iter != end ; ++iter ) if ( is_directory( *iter ) ) { cout << iter->native_directory_string() << " (directory)\n" ; if( recurse_into_subdirs ) show_files(*iter) ; } else cout << iter->native_file_string() << " (file)\n" ; } } int main() { show_files( "." ) ; } #包括 #包括 #包括 使用名称空间boost::filesystem; 使用名称空间std; void show_文件(const path&directory,bool recurse_into_subdirs=true) { 如果(存在(目录)) { 目录迭代器端; for(目录迭代器iter(目录);iter!=end;++iter) if(is_目录(*iter)) { cout native_directory_string()

帮我调试这个-C++;促进 我是C++的Boost。这里有人能帮我调试这个程序吗 #include <iostream> #include <boost/filesystem/operations.hpp> #include <boost/filesystem/fstream.hpp> using namespace boost::filesystem; using namespace std; void show_files( const path & directory, bool recurse_into_subdirs = true ) { if( exists( directory ) ) { directory_iterator end ; for( directory_iterator iter(directory) ; iter != end ; ++iter ) if ( is_directory( *iter ) ) { cout << iter->native_directory_string() << " (directory)\n" ; if( recurse_into_subdirs ) show_files(*iter) ; } else cout << iter->native_file_string() << " (file)\n" ; } } int main() { show_files( "." ) ; } #包括 #包括 #包括 使用名称空间boost::filesystem; 使用名称空间std; void show_文件(const path&directory,bool recurse_into_subdirs=true) { 如果(存在(目录)) { 目录迭代器端; for(目录迭代器iter(目录);iter!=end;++iter) if(is_目录(*iter)) { cout native_directory_string(),c++,boost,C++,Boost,我快速浏览了文档,在基本目录条目中找不到任何关于native_directory_string或native_file_string的内容。此外,这些成员函数属于不同的类(filesystem::path),我认为您可以从basic\u directory\u entry访问它,因此: iter->path().native_directory_string() 我快速浏览了一下文档,在基本目录条目中找不到任何关于本机目录字符串或本机文件字符串。AFAICT,这些成员函数属于不同的类(文

我快速浏览了文档,在基本目录条目中找不到任何关于
native_directory_string
native_file_string
的内容。此外,这些成员函数属于不同的类(
filesystem::path
),我认为您可以从
basic\u directory\u entry
访问它,因此:

iter->path().native_directory_string()

我快速浏览了一下文档,在基本目录条目中找不到任何关于
本机目录字符串
本机文件字符串
。AFAICT,这些成员函数属于不同的类(
文件系统::路径
),我认为您可以从
基本目录条目
访问这些函数,因此:

iter->path().native_directory_string()

要使其正常工作,您需要进行两项更改。首先,迭代器返回
基本目录项的实例,而不是路径。因此,首先您需要从迭代器中查询
路径。此外,较新版本的boost已经从访问器方法中删除了
本机前缀

以下是您的代码和更改:

#include <iostream>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/fstream.hpp>
using namespace boost::filesystem; 
using namespace std;

void show_files( const path & directory, bool recurse_into_subdirs = true )
{
  if( exists( directory ) )
  {
    directory_iterator end ;
    for( directory_iterator iter(directory) ; iter != end ; ++iter )
    if ( is_directory( *iter ) )
    {
      cout << iter->path().directory_string() << " (directory)\n" ;
      if( recurse_into_subdirs ) show_files(*iter) ;
    }
    else 
      cout << iter->path().file_string() << " (file)\n" ;
  }
}

int main()
{
    show_files( "." ) ;
}
#包括
#包括
#包括
使用名称空间boost::filesystem;
使用名称空间std;
void show_文件(const path&directory,bool recurse_into_subdirs=true)
{
如果(存在(目录))
{
目录迭代器端;
for(目录迭代器iter(目录);iter!=end;++iter)
if(is_目录(*iter))
{

cout path().目录\字符串()要使其正常工作,您需要进行两项更改。首先,迭代器返回
基本目录项的实例,而不是路径。因此,首先需要从迭代器中查询
路径。此外,较新版本的boost已从访问器方法中删除了
本机
前缀

以下是您的代码和更改:

#include <iostream>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/fstream.hpp>
using namespace boost::filesystem; 
using namespace std;

void show_files( const path & directory, bool recurse_into_subdirs = true )
{
  if( exists( directory ) )
  {
    directory_iterator end ;
    for( directory_iterator iter(directory) ; iter != end ; ++iter )
    if ( is_directory( *iter ) )
    {
      cout << iter->path().directory_string() << " (directory)\n" ;
      if( recurse_into_subdirs ) show_files(*iter) ;
    }
    else 
      cout << iter->path().file_string() << " (file)\n" ;
  }
}

int main()
{
    show_files( "." ) ;
}
#包括
#包括
#包括
使用名称空间boost::filesystem;
使用名称空间std;
void show_文件(const path&directory,bool recurse_into_subdirs=true)
{
如果(存在(目录))
{
目录迭代器端;
for(目录迭代器iter(目录);iter!=end;++iter)
if(is_目录(*iter))
{

cout path().directory_string()因为我不能简单地在(当前)最上面的答案中添加注释,所以我想记下

boost::filesystem::wpath::native_file_string()被弃用并更改为boost::filesystem::wpath::string()

cout << iter->native_file_string() << " (file)\n" ;

cout native_file_string()因为我不能简单地在(当前)最上面的答案中添加注释,所以我想记下

boost::filesystem::wpath::native_file_string()被弃用并更改为boost::filesystem::wpath::string()

cout << iter->native_file_string() << " (file)\n" ;

cout native_file_string(),我尝试了上面的代码。但是它会产生很多错误。顺便说一句,tanx for ur response这在我的机器上编译并运行得很好(带Boost 1.44的OS X)。我在上面详细介绍了您的代码的唯一更改。您得到的错误是什么?问题可能是由Boost filesystem API中从v2更改为v3引起的,这会导致大量接口更改。如果您告诉我您使用的版本,我肯定我们可以解决。这是链接器错误,而不是编译器错误。如果您仔细看在未定义的符号处,它们都在
boost::system
名称空间中。这是因为
boost::filesystem
库依赖于
system
,所以您只需将
-lboost\u system
添加到链接器标志中。我尝试了上面的代码。但它会产生很多错误。顺便说一句,tanx for ur response编译并在我的机器上运行完美(带Boost 1.44的OS X)。我在上面详细介绍了您的代码的唯一更改。您得到的错误是什么?问题可能是由Boost filesystem API中从v2更改为v3引起的,这会导致大量接口更改。如果您告诉我您使用的版本,我肯定我们可以解决。这是链接器错误,而不是编译器错误。如果您仔细看在未定义的符号处,它们都在
boost::system
名称空间中。这是因为
boost::filesystem
库依赖于
system
,所以您只需要将
-lboost\u system
添加到链接器标志中。