C ++编译错误(REPAST库)

时间:2012-02-20 21:47:19

标签: c++

我正在开发代理建模项目,并决定使用repast。 我之前预先安装了一堆库,并下载了Repast源并尝试将其包含在项目中。但突然得到我无法理解的错误。

  

错误:'std :: operator +中没有匹配'operator +'(const std :: basic_string< _CharT,_Traits,_Alloc>&,const _CharT *)[_CharT = char,_ Traits = std :: char_traits, _Alloc = std :: allocator](((const char *)“_”))+ boost :: filesystem3 :: path :: filename()const()'

CODE:

NCDataSet::NCDataSet(std::string file, const Schedule& schedule) :
file_(file), schedule_(&schedule), start(0), open(true) 
{
    rank = RepastProcess::instance()->rank();
    if (rank == 0) {
        fs::path filepath(file);
        if (!fs::exists(filepath.parent_path())) {
            fs::create_directories(filepath.parent_path());
        } else if (fs::exists(filepath)) {
            string ts;
            repast::timestamp2(ts);
            fs::path to(filepath.parent_path() / (ts + "_" + filepath.filename()));
        fs::rename(filepath, to);
    }
}
}
ERROR LINE: fs::path to(filepath.parent_path() / (ts + "_" + filepath.filename()));

感谢!!!

1 个答案:

答案 0 :(得分:1)

错误表示它与operator+不匹配,即您尝试附加两种无效类型。

看起来path::filename没有返回std :: string。

class path {
  // ...
  path  filename() const;
  // ...
};

将中缀运算符视为保持操作左侧的类型是合理的。在这种情况下,std::string对提升或filesystem::path没有任何了解。

因此您可能需要将违规行更改为以下内容:

fs::path to(filepath.parent_path() / (ts + "_" + filepath.filename().string() ));

我发现当一堆内联操作如何导致错误并不是很明显时,将所有内容分离到它自己的行是一个很好的做法。在这种情况下,它甚至可以使代码更清晰一些。

std::string old_filename(filepath.filename().string());
std::string new_filename = ts +"_"+ old_filename;
fs::path to( filepath.parent_path() / new_filename);