template Problem mit iterator
-
Hallo
mein Problem findet sich in der Print Funktion in folgendem Code:
#include <iostream> #include <vector> template<typename T> class A { public: A(const T& v): val(v){} virtual ~A(){} T val; }; template<typename T> class ManyA { private: std::vector< A<T> > avec ; public: ManyA() { } ~ManyA() { } void add( const A<T>& a ) { avec.push_back(a); } void Print(){ for( std::vector< A<T> >::iterator pos = avec.begin(); pos = avec.begin(); ++pos) { std::cout << pos->val << "\n" } std::cout << std::endl; } }; int main() { A<int> aint1(10); A<int> aint2(20); ManyA<int> manyA; manyA.add( aint1 ) ; manyA.add( aint2 ) ; manyA.Print(); }
das
std::vector< A<T> >::iterator pos = avec.begin();
kompiliert nichtwie bekomm ich einen Iterator von avec?
danke für die Hilfe
-
- Die Bedingung ist das Problem da muss "!= end()" stehen und nicht "= begin()"
- Da fehlt ein ;MfG SideWinder
-
Hast du dir überhaupt mal die Fehlermeldung angeschaut? Jeder halbwegs aktuelle Compiler sollte dir da einen genügenden Hinweis zum fehlenden ; geben. Und den anderen Fehler hättest du relativ leicht mit einem Debugger gefunden..
-
das 2x pos = avec.begin() steht ist ein Abschreibfehler der mir passiert ist.
die Zeile ist orignial so
for( std::vector< A<T> >::iterator pos = avec.begin(); pos != avec.end(); ++pos)
also anscheinend prinzipiell richtig.
Compilermeldung ist:
..In member function ‘void ManyA<T>::Print()’:
..error: expected `;' before ‘pos’|was absolut nicht funktinoiert ist den Iterator zu erstellen
ich kann irgendwo in ManyA das
std::vector< A<T> >::iterator Iter;
hinschreiben, immer der gleiche Compilerfehler..error: expected `;' before ‘VARIABLENNAME’|
codeblocks + gcc 4.2.3
-
Ich reduziere das Problem noch mal auf das notwendigste
template<typename T> class A { public: A(const T& v): val(v){} virtual ~A(){} T val; }; template<typename T> class ManyA { private: std::vector< A<T> > avec ; std::vector< A<T> >::iterator Iter; // Fehler !! public: ManyA() { } ~ManyA() { } };
Meldung:
error: type ‘std::vector<A<T>, std::allocator<A<T> > >’ is not derived from type ‘ManyA<T>’|
error: expected ‘;’ before ‘Iter’|
-
Schreib "typename" davor:
typename std::vector< A<T> >::iterator Iter;
MfG SideWinder
-
Danke!
-
Nun erkundige dich aber auch schleunigst, warum du das machen musst! Das du mir hier ja nicht zum blinden Abschreiber wirst!
MfG SideWinder