簡體   English   中英

錯誤:沒有匹配的 function 調用“進程” <std::vector<double> &gt;::minmax(const std::vector<double> &amp;,標准::向量<double> &amp;) 常量'| </double></double></std::vector<double>

[英]error: no matching function for call to 'Processus<std::vector<double> >::minmax(const std::vector<double>&, std::vector<double>&) const'|

我有一個問題,我的 class 和我的 minmax function 編碼如下

template<typename T>
class Processus {
public:
    typedef pair<double, T> state;
    typedef vector<state> result_type;

    Processus(int n = 0) : v(n+1)
    {
        Schedule w(n);
        auto i_w = w.begin();
        for (auto it = v.begin(); it != v.end(); ++it, ++i_w) it->first = *i_w;
    };
    Processus(const Schedule& w) : v(w.size()) {
        auto i_w = w.begin();
        for (auto it = v.begin(); it != v.end(); ++it, ++i_w) it->first = *i_w;
    }
    ~Processus() {};
    virtual result_type operator()() = 0;

    auto begin() const { return v.begin(); };
    auto end() const { return v.end(); };

    pair<T, T> minmax() const;

protected:
    vector<state> v;
};
    
pair<vector<double>, vector<double>> minmax(const vector<double>& v1, const vector<double> v2){
    pair<vector<double>, vector<double>> cur(v1, v2);
    auto i_min = cur.first.begin(), i_max = cur.second.begin();
    for (auto it = v1.begin(), it2 = v2.begin(); it != v1.end(); ++it, ++it2, ++i_min, ++i_max) {
        *i_min = ::min(*it, *it2);
        *i_max = ::max(*it, *it2);
    }
    return cur;
}


template<>
inline pair<vector<double>, vector<double>> Processus<vector<double>>::minmax() const {
    pair<vector<double>, vector<double>> cur(begin()->second, begin()->second);
    for (auto it = begin()+1; it != end(); ++it) {
        cur.first = minmax(it->second,cur.first).first;
        cur.second = it->second.minmax(cur.second).second;
    };
    return cur;
};

但是,我收到錯誤:

錯誤:沒有匹配的 function 調用 'Processus<std::vector<double> >::minmax(const std::vector<double>&, std::vector<double>&) const'

對應於這一行:

cur.first = minmax(it->second,cur.first).first;

Processus::minmax()內部,您的意圖是調用獨立的 2 參數minmax() function。 但是,從錯誤消息中可以清楚地看出,編譯器正在嘗試以遞歸方式調用Processus::minmax() ,這不起作用,因為Processus::minmax()不接受任何參數。

要調用同名的獨立 function,請在調用前加上:: scope 運算符:

cur.first = ::minmax(it->second,cur.first).first;

否則,將獨立的 function 重命名為更獨特的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM