2013-02-26 6 views
0

У меня возникла проблема с этим кодом, в нем говорится, что не существует соответствующего вызова функции для времени, хотя я использую одни и те же типы данных, и число параметров одинаково, Кто-нибудь может мне помочь?нет соответствующей функции вызов неразрешенного типа функции

#include <iostream> 
#include <iterator> 
#include <random> 
#include <vector> 
#include<list> 
#include<deque> 
#include <algorithm> 
#include <chrono> 
#include <functional> 
#include <sstream> 

using namespace std; 
using namespace std::chrono; 


template<typename F, typename Arg, typename T> 
void times(F func, Arg A, int n, T typeval) // call func(arg,n, typeval) 
{ 
    auto t1 = system_clock::now(); 
    func(A, n, typval); 
    auto t2 = system_clock::now(); 
    auto dms = duration_cast<milliseconds>(t2-t1); 
    cout << "f(x) took " << dms.count() << " milliseconds\n"; 
} 



int random_gen(int& i){ 
    default_random_engine re { std::random_device()() }; 
    uniform_int_distribution<int> dist; 
    auto r= bind(dist,re); 
    int x =r(); 
    return x; 
    //return rand(); 
} 

string random_gen(string& s) 
{ 
    string Result;   // string which will contain the result 
    ostringstream convert; // stream used for the conversion 
    convert << rand(); 
    return convert.str(); 
} 

template<typename SequenceContainer, typename T> 
void build_cont(SequenceContainer& seq, int n, T valtype) 
{ 
    for(int i=0; i!=n; ++i) { 
     T gen = random_gen(valtype); 
     typename SequenceContainer::iterator it = find_if(seq.begin(), seq.end(), [gen] (const typename SequenceContainer::reference & val) { return gen < val; }); 
     seq.insert(it, gen); 
    } 
    for(auto i:seq) 
     cout<<i<<endl; 
} 
int main() { 
    int n=10; 
    vector<int> v; 
    list<int>ls; 
    deque<int> deq; 
    cout<<"vector of int"<<endl; 
    times(build_cont, v, n, 0); 

// string stemp = ""; 
// cout<<"vector of strings"<<endl; 
// build_cont(sv, n, stemp); 
// cout<<"list of strings"<<endl; 
// build_cont(sls, n, stemp); 
// cout<<"deque of strings"<<endl; 
// build_cont(sdeq, n, stemp); 
//  
    return 0; 
} 

когда я бегу build_cont она работает просто отлично, но код перестанет работать, когда я положил его в функцию раз? любые предложения.

+0

поста (полный) примером кода, который выходит из строя, с помощью диагностических сообщений –

+1

у вас есть опечатка: 'FUNC (A, N, typval); 'должен быть' func (A, n, typeval); '. – juanchopanza

+0

Можете ли вы публиковать ошибки? Когда вы передаете 'build_cont', вы должны указать его параметры шаблона, например' build_cont ' – kassak

ответ

3

Вы должны указать параметры шаблона для build_cont

times(build_cont<std::vector<int>, int>, v, n, 0); 
+1

И 'func (A, n, typval);' должен быть 'func (A, n, typeval);'. –

Смежные вопросы