2017-02-01 4 views
-1

関数オブジェクトを使用するテンプレート関数を記述しようとしています。 関数オブジェクトが取得するparamはstd::set(タイプint)です。 何らかの理由で、私がセットを:for(auto curr: set)と投げようとしているとき、それはforループに入りません、それはそれがstlセットであると認識しないのです!関数オブジェクトは、取得するパラメータ(std :: set <int>)を認識しません

MAIN:これはテンプレートです

int main() 
{ 
    Functor object_x; 
    SetInt set_1={1,2,6,4,3}; 
    SetInt set_output; 

    set_output=mtmAlgorithem_2(set_output ,set_1,object_x); 
    return 0; 
} 

は:

class Functor 
{ 
    public: 
     bool operator()(SetInt &before_x, SetInt &after_x){ 
      bool res=true; 
      for(int curr_1: before_x){ 


//------------not getting here---------------!!!!!!!!!!!!!! 

       for(int curr_2: after_x){ 
        if(curr_1>curr_2){ 
         res=false; 
         break; 
        } 
       } 
      } 
      std::cout<<"lla"<<std::endl; 
      return res; 
     }; 
}; 
+0

'SetInt'はどこに定義されていますか? –

答えて

1

ので、もちろんbefore_xそのループに何かを入れたことがないあなた:

template < typename SetToReturn,typename Generic, typename Functor > 

SetToReturn mtmAlgorithem_2(SetToReturn a,Generic input, Functor object){ 

//All elements after element X including X. 
    SetToReturn after_x; 
    //All elements before element X not-including X. 
    SetToReturn before_x; 
    //Output set 
    SetToReturn output; 

    //copy elements from input to after_x: 
    for(auto element: input){ 
     after_x.insert(element); 
    } 

    for(auto element: input){ 


// > ---------THIS IS WERE I CALL THE FUNCTION OBJECT------ 

     if(object(before_x,after_x)){ 
      output.insert(element); 
     } 
     before_x.erase(element); 
     after_x.insert(element); 
    } 
    return output; 
} 

これは関数オブジェクトであります何もしない。

関連する問題