未解析的重载函数类型,克隆for_each

Unresolved overloaded function type, clone for_each

本文关键字:克隆 for each 类型 函数 重载      更新时间:2023-10-16

在下面的代码中,我克隆了<algorithm>中定义的for_each函数(我相信)。唯一的问题是对于第三个参数,它是我制作的 void 函数,我得到了调用的不匹配函数......未解析的重载函数类型。有人可以对此事有所了解吗?

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
void fill(int& n) {          //The custom made function, a simple rewrite,
    if (n < 100)             //which is why I passed an int reference
        n = 100;
}
template <class Iterator, class Function>            //Clone for_each
void clone_for_each(Iterator first, Iterator last, Function f) {
    while( first != last) {
        f(*first);
        first++;
    }
}
int main (int argc, char const* argv[])
{
    //Just inputing data and printing it out
    //This part is fine up until...
    int n;
    cout << "Unesite broj vrsta artikala: ";
    cin >> n;
    vector<string> names;
    vector<int> quantity;
    cout << "Unesite naziv artikla potom njegovu kolicinu: " << endl;
    for (int i = 0; i < n; i++) {
        string name;
        int amount;
        cout << "Unesite naziv: ";
        cin >> name;
        cout << endl;
        cout << "Unesite kolicinu: ";
        cin >> amount;
        cout << endl;
        names.push_back(name);
        quantity.push_back(amount);
    }
    cout << "Raspolozivi artikli: " << endl;
    vector<string>::iterator itNames = names.begin();
    vector<int>::iterator itQuantity = quantity.begin();

    for(itNames, itQuantity; itNames != names.end(), itQuantity != quantity.end(); itNames++, itQuantity++ ) 
        cout << *itNames << " " << *itQuantity << endl;
    cout << "Artikli nakon dopune: " << endl;
    //right here, which is where I called for clone_for_each
    clone_for_each(quantity.begin(), quantity.end(), fill);  
    return 0;
}

既然你using namespace stdfill

clone_for_each(quantity.begin(), quantity.end(), fill);

应该是<algorithm> std::fill(),不适合clone_for_each().

看看为什么using namespace std被认为是有害的?