控制到达非空函数警告c ++的结尾

时间:2016-07-24 04:20:29

标签: c++

以下代码在行尾生成“控制到达非空函数的结尾”警告。什么可能出错?从快速搜索来看,它似乎与返回值有关。

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);


        }
            }
    }
}

2 个答案:

答案 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]){总是失败,则不返回任何内容。您可以在函数末尾返回一个空向量,例如,在最后一个}之前返回。