我正在尝试运行的代码:
std::string genBlankName(std::vector<Post> &posts)
{
std::string baseName = "New Post ";
int postNum = 1;
for (std::vector<Post>::iterator currentPost = posts.begin(); currentPost != posts.end(); currentPost++)
{
if (posts[currentPost].name.substr(0, baseName.length()) == baseName &&
utils::is_num(posts[currentPost].name.substr(baseName.length(), std::string::npos)) &&
utils::to_int(posts[currentPost].name.substr(baseName.length(), std::string::npos)) > postNum)
{
postNum = utils::to_int(posts[currentPost].name.substr(baseName.length(), std::string::npos));
}
}
return baseName + utils::to_string(postNum);
}
我得到的错误:
/ home / brett / projects / CLPoster / CLPoster-build-desktop /../ CLPoster / item.h:240:错误:没有匹配函数来调用
std::vector<cl::Post, std::allocator<cl::Post> >::at(__gnu_cxx::__normal_iterator<cl::Post*, std::vector<cl::Post, std::allocator<cl::Post> > >&)
很抱歉没有多说,但我认为这是一个很常见的事情,我只是不知道自己是一个小组。我会谷歌它,但似乎太普遍的问题,因为我怀疑它更多的是我的实现的问题或其他一些问题。
答案 0 :(得分:9)
订阅需要使用索引,您正在使用迭代器。
根本不需要下标,只需取消引用迭代器:
currentPost->name.substr(0, baseName.length())
......等等。
答案 1 :(得分:6)
您不在下标上使用迭代器。只需要size_t
for (size_t currentPost = 0; currentPost < posts.size(); ++currentPost)
或取消引用迭代器:
currentPost->name.substr(0, baseName.length())
答案 2 :(得分:1)
std::vector<typename T>
是一个随机访问容器,但是,您必须使用offset来访问给定位置的元素。例如,如果要获取元素编号5,则可以编写如下内容:
std::vector<int> data;
data[5] = 10;
但是在你的例子中,你使用的是迭代器。将迭代器视为指向Post
对象的指针。您不能将该指针用作向量中元素的索引。所以你的代码应该是这样的:
std::string genBlankName (std::vector<Post> &posts)
{
std::string baseName = "New Post ";
int postNum = 1;
for (std::vector<Post>::iterator currentPost = posts.begin();
currentPost != posts.end(); currentPost++)
{
if (currentPost->name.substr(0, baseName.length()) == baseName &&
utils::is_num(currentPost->name.substr(baseName.length(), std::string::npos)) &&
utils::to_int(currentPost->name.substr(baseName.length(), std::string::npos)) > postNum)
{
postNum = utils::to_int(currentPost->name.substr(baseName.length(), std::string::npos));
}
}
return baseName + utils::to_string(postNum);
}
或者你可以使用索引,但是你不能使用迭代器,例如:
std::string genBlankName (std::vector<Post> &posts)
{
std::string baseName = "New Post ";
int postNum = 1;
for (size_t currentPost = 0; currentPost < posts.size (); ++currentPost)
{
if (posts[currentPost].name.substr(0, baseName.length()) == baseName &&
utils::is_num(posts[currentPost].name.substr(baseName.length(), std::string::npos)) &&
utils::to_int(posts[currentPost].name.substr(baseName.length(), std::string::npos)) > postNum)
{
postNum = utils::to_int(posts[currentPost].name.substr(baseName.length(), std::string::npos));
}
}
return baseName + utils::to_string(postNum);
}
希望它有所帮助。快乐的编码!
答案 3 :(得分:1)
vector operator[]将size_type
作为参数,而不是std::vector::iterator
类型。