SRD

no match

SRD
Jul 9th, 2018
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.23 KB | None | 0 0
  1.     template <typename T>
  2.     using MyTuple = std::tuple<int, MyData, T>;
  3.  
  4.     std::unique_ptr<std::priority_queue<MyTuple<MyTypeA>,
  5.         std::vector<MyTuple<MyTypeA>>,
  6.         Compare<MyTuple<MyTypeA>>>> pqueue1;
  7.        
  8.     std::unique_ptr<std::priority_queue<MyTuple<MyTypeB>,
  9.         std::vector<MyTuple<MyTypeB>>,
  10.         Compare<MyTuple<MyTypeB>>>> pqueue2;
  11.  
  12. // MyTypeA and MyTypeB are structs
  13.  
  14.     class Tester
  15.     {
  16.         public:
  17.             template <typename T>
  18.         void Tester::add_to_queue(T &typ)
  19.         {
  20.             int status;
  21.             T myType = typ;
  22.  
  23.             char *cname = abi::__cxa_demangle(typeid(myType).name(), 0, 0, &status);
  24.    
  25.             string ctype(cname);
  26.  
  27.             int lvl = 1;
  28.             MyData data;  
  29.             MyTuple<P> t(lvl, data, myType);
  30.        
  31.             if (ctype.compare("MyTypeA") == 0)
  32.             {
  33.                 pqueue1->push(std::make_tuple(lvl, data, itemType));
  34.             } else if (ctype.compare("MyTypeB") == 0)
  35.             {
  36.                 int lvl = 2;
  37.                 MyData data;
  38.                 pqueue2->push(std::make_tuple(lvl, data, itemType));
  39.             }
  40.         }
  41.     };
  42.  
  43. // In fileA.cpp I have ...
  44.     DataTypeA dta;
  45.     // ...
  46.     mgr->add_to_queue<DataTypeA>(dta);
  47.    
  48. // And in fileB.cpp, I have ...
  49.     DataTypeB dtb;
  50.     // ...
  51.     mgr->add_to_queue<DataTypeB>(dtb);
  52.  
  53. /*
  54. When I compile this, I get the following error ...
  55.  
  56. Tester.h:63:3: error: no matching function for call to ‘std::priority_queue<std::tuple<int, MyData, DataTypeB>, std::vector<std::tuple<int, MyData, DataTypeB> >, Compare<std::tuple<int, MyData, DataTypeB> > >::push(std::tuple<int, MyData, DataTypeA>)’
  57.    pqueue2->push(std::make_tuple(lvl, data, itemType));
  58.    ^
  59. fileA.cpp:5:
  60. /usr/include/c++/5/bits/stl_queue.h:499:7: note: candidate: void std::priority_queue<_Tp, _Sequence, _Compare>::push(const value_type&) [with _Tp = std::tuple<int, MyData, DataTypeB>; _Sequence = std::vector<std::tuple<int, MyData, DataTypeB> >; _Compare = Compare<std::tuple<int, MyData, DataTypeB> >; std::priority_queue<_Tp, _Sequence, _Compare>::value_type = std::tuple<int, MyData, DataTypeB>]
  61.        push(const value_type& __x)
  62.        ^
  63. /usr/include/c++/5/bits/stl_queue.h:499:7: note:   no known conversion for argument 1 from ‘std::tuple<int, MyData, DataTypeA>’ to ‘const value_type& {aka const std::tuple<int, MyData, DataTypeB>&}’
  64. /usr/include/c++/5/bits/stl_queue.h:507:7: note: candidate: void std::priority_queue<_Tp, _Sequence, _Compare>::push(std::priority_queue<_Tp, _Sequence, _Compare>::value_type&&) [with _Tp = std::tuple<int, MyData, DataTypeB>; _Sequence = std::vector<std::tuple<int, MyData, DataTypeB> >; _Compare = Compare<std::tuple<int, MyData, DataTypeB> >; std::priority_queue<_Tp, _Sequence, _Compare>::value_type = std::tuple<int, MyData, DataTypeB>]
  65.        push(value_type&& __x)
  66.        ^
  67. /usr/include/c++/5/bits/stl_queue.h:507:7: note:   no known conversion for argument 1 from ‘std::tuple<int, MyData, DataTypeA>’ to ‘std::priority_queue<std::tuple<int, MyData, DataTypeB>, std::vector<std::tuple<int, MyData, DataTypeB> >, Compare<std::tuple<int, MyData, DataTypeB> > >::value_type&& {aka std::tuple<int, MyData, DataTypeB>&&}’
  68. */
Advertisement
Add Comment
Please, Sign In to add comment