编译程序的错误

时间:2014-05-09 20:49:50

标签: c++

我正在编译一个开源项目,但是我收到了一个我从未见过的错误:

luascript.cpp: In member function ‘bool LuaInterface::loadDirectory(const string&, Npc*, bool)’:
luascript.cpp:742:41: error: ‘boost::filesystem2::basic_path<std::basic_string<char>, boost::filesystem2::path_traits>::string_type’ has no member named ‘string’

这是源代码:

bool LuaInterface::loadDirectory(const std::string& dir, Npc* npc/* = NULL*/, bool recursively/* = false*/)
{
StringVec files;
for(boost::filesystem::directory_iterator it(dir), end; it != end; ++it)
{
    std::string s = it->path().filename().string(); //This is line 742
    if(boost::filesystem::is_directory(it->status()))
    {
        if(recursively && !loadDirectory(it->path().filename() + "/" + s, npc, recursively))
            return false;
    }
    else if((s.size() > 4 ? s.substr(s.size() - 4) : "") == ".lua")
        files.push_back(s);
}

std::sort(files.begin(), files.end());
for(StringVec::iterator it = files.begin(); it != files.end(); ++it)
{
    if(!loadFile(dir + (*it), npc))
        return false;
}

return true;
}

1 个答案:

答案 0 :(得分:2)

在旧版本的boost文件系统中,方法filename()的返回类型是string_type而不是path类型。 string_type没有与路径类型相反的成员filename()。

对于您正在使用的旧版本的boost,您可以删除代码中的.string()部分。