我正在开发代理建模项目,并决定使用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()));
感谢!!!
答案 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);