我正在尝试在Qt中实现一个简单的菜单应用程序,我到了必须制作过滤器按钮的地方。 Qt给出了一个错误,我不知道如何解释它。它可能只来自这两个功能。我也会发布一张错误照片。 过滤操作的代码:
vector<Car> Controller::filterByCategory(string category) {
vector<Car> fin;
vector<Car> all(repo->getAll());
copy_if(all.begin(), all.end(),fin.begin(),
[&](Car& cc) { return (cc.getCategory()==category); });
return fin;
}
调用过滤函数的Qt函数:
void OwnerWindow::filterCategory() {
QString sCategory = lCategory->text();
string category = sCategory.toStdString();
vector<Car> cars = ctrl->getAllCars();
vector<Car> fin;
try {
fin = ctrl->filterByCategory(category);
}
catch(WarehouseException& ex) {
QMessageBox::information(this, "Error!", QString::fromStdString(ex.getMsg()));
}
catch(...) {
QMessageBox::information(this,"wtf",QString::fromStdString("huuuuuh"));
}
此处我的程序崩溃并出现以下错误:
知道会发生什么,为什么Qt不会发现一些错误或为什么代码不能正常工作?
编辑: 我试图计算我将添加的元素数量,以便我可以创建具有固定大小的最终向量。没用。
vector<Car> Controller::filterByCategory(string category) {
// vector<Car> fin;
vector<Car> all(repo->getAll());
int i = 0;
for_each(all.begin(),all.end(), [=](const Car& cc) mutable {
if (cc.getCategory() == category) {
i++;
}
});
vector<Car> fin(i);
copy_if(all.begin(), all.end(),fin.begin(),
[&](Car& cc) { return (cc.getCategory()==category); });
return fin;
}
答案 0 :(得分:4)
<div class="container">
<ul>
<li>test sdfsdfs</li>
<li>testsdf sdfsd</li>
<li>test sdfsdfs</li>
<li>testsdf sdfsd</li>
<li>test sdfsdfs</li>
<li>testsdf sdfsd</li>
<li>test sdfsdfs</li>
<li>testsdf sdfsd</li>
<li>test sdfsdfs</li>
<li>testsdf sdfsd</li>
</ul>
</div>
的问题是,向量filterByCategory
为空,您需要使用正确数量的元素创建它,或使用std::back_inserter
按需创建元素。
顺便说一句,没有必要先复制到fin
向量中。使用例如all
直接repo->getAll().begin()
来电。{/ p>