C++编译错误(REPAST库)
问题描述:
我正在开发代理建模项目,并决定使用该工具。 我已经预先安装了一堆库,并下载了重新启动源,并试图将其包含在项目中。但突然出现我无法理解的错误。C++编译错误(REPAST库)
error: no match for ‘operator+’ in ‘std::operator+(const std::basic_string<_CharT, _Traits, _Alloc>&, const _CharT*) [with _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()));
谢谢!
答
该错误表明它不能匹配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);
是唯一的错误?如果没有,你可以发布完整的编译器输出吗? – hmjd 2012-02-20 22:03:17