bigpoint Geschrieben 26. Januar 2004 Geschrieben 26. Januar 2004 Also ich habe einen vector so: typedef struct { int i; } test; vector<test, allocator<test> > m_testvec; [/PHP] Dann befühle ich ihn so: [PHP] test t; for(int i = 0;i<=100;i++) { t.i=i; } m_rsavec.push_back(t); Und dann wollte ich eine Funktion in andere Klasse schreiben die den vector übernimmt etwa so : void Write(const CString& path, vector<test_vec, allocator<test_vec> > m_vec ); Writer r; r.Write("C:\test",m_rsavec); // hier Fehler: //Konvertierung des Parameters 2 von 'class std::vector<struct ttest,class std::allocator<struct test> >' in 'class std::vector<struct ttest_vec,class std::allocator<struct ttest_vec> >' nicht mo eglich [/PHP] Also die Klasse Write hat genau so eine struc test :confused: Zitieren
kLeiner_HobBes Geschrieben 26. Januar 2004 Geschrieben 26. Januar 2004 aus deinen Ausführungen muss ich entweder verstehen, dass du die Klasse test in deiner Klasse Writer noch einmal definiert hast oder dass du in der Funktionsdefinition von Write den falschen Template-Parameter angegeben hast. Im ersten Fall ist das einfache Konvertieren IMO nicht möglich, da kein copy-Konstruktor für die Klasse test von test_vec und vice-versa besteht. Du müsstest also einen Copy-Konstruktor schreiben. Ich würde eher die nächste Lösung präferieren. Der zweite Fall: Bedeutet, dass du in der Funktionsdefinition im zweiten Parameter den Template-Parameter in <test> etc. änderst. Ist vielleicht sogar einfacher, ein typdef auf std::vector<test, std::allocator<test> > zu machen und diesen dann zu verwenden. HTH & Gruß Benjamin Zitieren
bigpoint Geschrieben 27. Januar 2004 Autor Geschrieben 27. Januar 2004 Original geschrieben von kLeiner_HobBes Der zweite Fall: Bedeutet, dass du in der Funktionsdefinition im zweiten Parameter den Template-Parameter in <test> etc. änderst. Ist vielleicht sogar einfacher, ein typdef auf std::vector<test, std::allocator<test> > zu machen und diesen dann zu verwenden. HTH & Gruß Benjamin wie meinst du den zweiten Parameter ändern, auf was ?? Kannst Du mir es mit code sagen ? Zitieren
Crush Geschrieben 27. Januar 2004 Geschrieben 27. Januar 2004 typedef vector<test, allocator<test> > tester; tester m_testvec; void Write(const CString& path, const tester& m_vec ); [/PHP] würde ich mal sagen =8-) Zitieren
kLeiner_HobBes Geschrieben 27. Januar 2004 Geschrieben 27. Januar 2004 Hallo! Genauso hab ichs gemeint. Hatte bis jetzt leider keine Zeit. (Sch*** Hausratsversicherungsseminar) *grins @007ski: wenn das nicht hilft, schick mir mal den code. Ich kann dir die entsprechenden Sachen dann ändern und kommentieren, wenn du glaubst, dass dies dir wesentlich weiterhelfen würde. Gruß Benjamin Zitieren
bigpoint Geschrieben 28. Januar 2004 Autor Geschrieben 28. Januar 2004 Moment, von vorne an Also ich habe eine Klasse sagen wir CKlass1 in der Cklass1 habe eine struct und einen vector typedef struct { int i; } test; vector<test, allocator<test> > m_testvec; [/PHP] dann habe ich eine andere Klasse sagen wir Cklass2 in der Cklass2 will ich eine Funktion schreiben die mir den vector von Cklass1 übernimmt. So wie ich es verstehe muss ich in der Cklass2 noch mal die struct test schreiben wieder einen vector definieren und davon die Referenz in der Funktion übergeben, oder ??, wenn es richtig ist dann wie übergebe ich die Funktion den vector !?!? Also dass kann nicht funktionieren da [b]m_vec[/b] wurde nicht geben Zitieren
Klotzkopp Geschrieben 28. Januar 2004 Geschrieben 28. Januar 2004 1. Lass das mit dem typedef. Das brauchst du in C++ nicht. 2. Lass das mit allocator<test>. Das ist der Default-Allocator für vector. struct test { int i; }; vector<test> m_testvec; [/CODE] Wenn du diesen Vector jetzt in einer anderen Klasse benutzen willst, darfst du nicht eine identische Struktur deklarieren, denn selbst wenn die Strukturen gleich aufgebaut sind, sind es unterschiedliche Typen, und damit sind sie nicht ineinandert konvertierbar. Selbst wenn du sie konvertierbar machen würdest (z.B. durch entsprechende Konstruktoren), sind die Vektoren immer noch nicht konvertierbar. Das kannst du nur lösen, indem du [i]denselben[/i] Typ für die Struktur verwendest: [CODE] class Cklass2 { void Function(vector<CKlass1::test> vec); }; Dazu muss test in CKlass1 public sein (oder CKlass2::Function ein friend vom CKlass1), Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.