以下代码在行尾生成“控制到达非空函数的结尾”警告。什么可能出错?从快速搜索来看,它似乎与返回值有关。
std::vector<csce::point<T>> compute_hull(std::vector<csce::point<T>>& points) const {
for(std::size_t x=0; x<points.size(); x++){
for(std::size_t m=1; m<(1<<(1<<x)); m++){
std::vector<std::vector<csce::point<T>>> hulls;
for(std::size_t i=0; i<points.size(); i=i+m){
std::vector<csce::point<T>> chunk;
if(points.begin()+i+m <= points.end())
chunk.assign(points.begin()+i,points.begin()+i+m);
else
chunk.assign(points.begin()+i,points.end());
hulls.push_back(this->graham_scan(chunk));
}
std::vector<std::pair<int,int>> hull;
hull.push_back(this->extreme_hullpt_pair(hulls));
for(std::size_t i=0; i<m; ++i){
std::pair<int,int> p = this->next_hullpt_pair(hulls,hull[hull.size()-1]);
std::vector<csce::point<T>> output;
if(p==hull[0]){
for(std::size_t j=0; j<hull.size(); j++){
output.push_back(hulls[hull[j].first][hull[j].second]);
}
return output;
}
hull.push_back(p);
}
}
}
}
答案 0 :(得分:3)
正确格式化对于正确解释编译器警告和错误消息非常重要!
这个模式在函数定义的最后
INSERT INTO `abc` VALUES (1,'<!DOCTYPE HTML><html lang=\'en\' dir=\'ltr\' class=\'chrome chrome51\'><head><meta charset=\"utf-8\" /><meta name=\"robots\" content=\"noindex,nofollow\" /><meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"><style id=\"cfs-style\">html{display: none;}</style><link rel=\"icon\" href=\"favicon.ico\" type=\"image/x-icon\" /><link rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image/x-icon\" /><link rel=\"stylesheet\" type=\"text/css\" href=\"./themes/pmahomme/jquery/jquery-ui-1.11.2.css\" /><link rel=\"stylesheet\" ...\n</span></th><td><input type=\"number\" name=\"NavigationTreeTableLevel\" id=\"NavigationTreeTableLevel\" value=\"1\" /><a');
是一个明显的标志,你的格式/缩进被严重搞砸了。
但是,在最后一个大括号之前放置一个return语句应该可以修复错误
}
}
}
}
再次关于格式化,总是要明确嵌套哪些代码块(理想情况下使用大括号)
// ...
return points; // <<<<
}
答案 1 :(得分:0)
compute_hull
应该在所有代码路径中返回类型std::vector<csce::point<T>>
的值,但如果条件if(p==hull[0]){
总是失败,则不返回任何内容。您可以在函数末尾返回一个空向量,例如,在最后一个}
之前返回。