Zum Inhalt springen

vector


bigpoint

Empfohlene Beiträge

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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),

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...