Cast-Operator ueberladen in Templates
-
Hoi. Wie an anderer Stelle schon vorgestellt, hab ich mir ein Klasse offsetvector geschrieben, die intern einen std::vector benutzt. Soeben ist CINT auf den Trichter gekommen, mir den cast-operator zu bemaengeln, den ich hinzugeuegt habe, um aus einem offsetvector einen normale vector machen zu koennen:
template <class T, class Allocator = std::allocator<T> > class offsetvector { public: //[...] operator std::vector<T, Allocator>() { return vec_; }; //line 46 //[...] private: std::vector<T, Allocator> vec_; };Die Fehlermeldung besagt folgendes:
Error: Too many template arguments offsetvector.h:46:Was ist falsch?
-
Hm, nachdem er nach Auskommentieren des Cast-operators ueber einen Konstuktor gemeckert hat, hab ich versucht, in meinem Programm nur einen std::vector zu benutzen - jetzt meckert er sogar ueber einen der std::vector Konstruktoren. Werd mich mal kundig machen, warum er jetzt nichtmal die STL akzeptiert...
-
Hast du denn überhaupt die <vector> includet?
-
CStoll schrieb:
Hast du denn überhaupt die <vector> includet?
hab ich:
#ifndef lumis__ #define lumis__ #include <vector> #include <iostream> typedef std::vector<double> dblvec; typedef std::vector<dblvec> dblvecvec; dblvecvec lumis; struct LumiFiller { public: LumiFiller() { lumis.resize(2); } }; LumiFiller a; #endifbei lumis.resize(2) faengt er an zu meckern
Error: illegal type cast (2) _vector.h:182:
-
ich quote hier mal noch welche Gedanken ich mir dazu im ROOT-forum gemacht habe:
According to my STL reference, vector<T>.resize is declared as
void resize(size_type sz, T c = T());thus my call above shoud be evaluated as
lumis.resize(2, std::vector<double>() );where the default constructor of vector is declared as
template <class T, class Allocator = std::allocator<T> > class vector { vector(const Allocator& = Allocator() ); };when calling resize() with explicit mention of std::vector<double>(), I get a segmentation violation...
What am I doing wrong?
-
Mach mal ein
lumis.resize(dblvecvec::sizetype(2));daraus. Der Compiler scheitert hier an Mehrdeutigkeit.