[英]control reaches end of non-void function warning c++
下面的代碼在該行的末尾生成“控件達到非void函數的結尾”警告。 可能出了什么問題? 從快速搜索來看,它似乎與返回值有關。
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);
}
}
}
}
正確格式化對於正確解釋編譯器警告和錯誤消息很重要!
此函數定義在您的函數末尾
}
}
}
}
這是一個清晰的信號,表明您的格式/縮進已被嚴重破壞。
但是,將return語句放在最后一個大括號之前應該可以修復錯誤
// ...
return points; // <<<<
}
同樣要注意格式化,請始終弄清楚嵌套的代碼塊(最好使用花括號)
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)); // Outside if / else
在所有代碼路徑中, compute_hull
應該返回std::vector<csce::point<T>>
類型的值,但是如果條件if(p==hull[0]){
始終失敗,則不會返回任何內容。 例如,您可以在函數的末尾,恰好在last }
之前返回一個空向量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.