Non sapevo veramente cosa scrivere nel titolo, ma fondamentalmente ho un singolo .cpp, con solo le intestazioni di libreria standard incluse e nessuna parola chiave "using". Ho creato la mia funzione "genera (...)". Dopo aver incluso la libreria, Visual Studio mi mostra un errore (in cui viene chiamata la funzione), sostanzialmente dicendo che non sa se scegliere std :: generate (...) o generare (...) perché hanno liste di argomenti corrispondenti.Avviso di Visual Studio sulla funzione non nel namespace globale
È un bug o mi sono perso qualcosa? Potrei anche aggiungere che sto usando VS2015.
#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
template<typename Iter, typename Function>
Function generate(Iter begin, Iter end, Function f)
{
while (begin != end)
{
*begin = f();
++begin;
}
return f;
}
class Random
{
public:
Random(int low, int high)
: mLow(low), mHigh(high)
{}
int operator()()
{
return mLow + rand() % (mHigh - mLow + 1);
}
private:
int mLow;
int mHigh;
};
class Print
{
void operator()(int t)
{
std::cout << t << " ";
}
};
int main()
{
srand(time(0));
std::vector<int> intVec;
intVec.resize(15);
Random r(2, 7);
generate(intVec.begin(), intVec.end(), r);
}
uscita Error:
1>------ Build started: Project: Functor, Configuration: Debug Win32 ------
1> Main.cpp
1>c:\users\michael sund\documents\visual studio 2015\projects\gi_cpp\functor\main.cpp(44): warning C4244: 'argument': conversion from 'time_t' to 'unsigned int', possible loss of data
1>c:\users\michael sund\documents\visual studio 2015\projects\gi_cpp\functor\main.cpp(50): error C2668: 'generate': ambiguous call to overloaded function
1> c:\users\michael sund\documents\visual studio 2015\projects\gi_cpp\functor\main.cpp(7): note: could be 'Function generate<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>,Random>(Iter,Iter,Function)'
1> with
1> [
1> Function=Random,
1> Iter=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>
1> ]
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\algorithm(1532): note: or 'void std::generate<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>,Random>(_FwdIt,_FwdIt,_Fn0)' [found using argument-dependent lookup]
1> with
1> [
1> _FwdIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>,
1> _Fn0=Random
1> ]
1> c:\users\michael sund\documents\visual studio 2015\projects\gi_cpp\functor\main.cpp(50): note: while trying to match the argument list '(std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>, std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>, Random)'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Si prega di inviare il codice pertinente, preferibilmente un [MCVE] (http://stackoverflow.com/help/mcve). –
... e il testo dell'errore * verbatim *. – WhozCraig
Hai risposto alla tua stessa domanda: hai due funzioni con lo stesso nome e la stessa firma. Usa ':: generate()' per dire al compilatore che vuoi "la tua versione". Meglio, considera la possibilità di creare il tuo spazio dei nomi. O dando alla tua funzione un nome diverso. – paulsm4