Wie gebe ich ein CArray Objekt zurück?

LaciFux

Grünschnabel
Hallo,

ich bräuchte mal Hilfe in Bezug auf die Klasse CArray. Wie kann ich aus einer Funktion ein Feld vom Typ CArray zurückgeben? Normalerweise geht das mit Zeigern aber das funktioniert hier nicht.

Code (+ MFC):

? functionxyz(void){
CArray <CString> myArrStr;
...
...
...
return ?; // -> hier will ich das Feld ganz normal zurückgeben...!
}


Wäre top wenn mir da jemand helfen könnte!

Grüße
LaciFux :confused:
 
Was meinst 'n genau mit "Bei mir bringt das nichts"?

Bekommst eine Fehlermeldung? Wenn ja was?
Wie sieht deine Funktion aus?


Gruß
RedQueen
 
Hi.

d00p kann es tatsächlich nicht ausprobiert haben, denn das geht so wirklich nicht. Erstens ist CArray eine Template-Klasse und da fehlt dann eine Template-Argumentenliste beim Rückgabetyp der Funktion.

Aber auch dann funktioniert es nicht so, denn CArrays besitzen keinen Copy Konstruktor und auch keinen Zuweisungsoperator.

Bleiben 2 Möglichkeiten:
C++:
void func(CArray<CString>& ret) {
  // ret hier verändern...
}

// Aufruf:
CArray<CString> x;
func(x);
Dabei wird ein CArray<CString> als Referenz an die Funktion übergeben und die Funktion kann das Array dann nach Belieben verändern.

Oder mit Pointern:
C++:
CArray<CString>* func(void) {
  CArray<CString>* ret = new CArray<CString>();
  // ...
  return ret;
}

// Aufruf:
CArray<CString>* x = func();
// der Aufrufer ist verantwortlich für die Freigabe des Speichers:
delete x;

Anstatt sich mit den MFC Klassen rumzuplagen könnte man natürlich die Klassen aus der Standard Template Library (std::vector etc.) benutzen.

Gruß
 
Er sagt, dass die überladene Funktion sich vom Rückgabewert unterscheidet. Ebenfalls meckert er wenn man den <TYPE> nicht setzt. Letztes mal hatte ich ihn bis auf eine Fehlermeldung runter gehabt. Diese war jedoch das er nicht auf ein private member zugreifen könne. Habe das Problem mit nem Zeiger gelöst und es funktioniert. Allerdings benutzt ich so kein CArray Object sondern einfach nur ein CString- Feld. Komisch ist es aber schon, das ich es nicht schaffe ein CArray Object zurück zugeben. Vielleicht hast Du ja ein Beipiel indem es klappt!

Grüße
LaciFux
 
Hi,

hast du es denn schon mit den Vorschlägen von deepthroat versucht?
Wenn du unbedingt CArray benutzen willst, wüsste ich ansonsten auch keine anderen Wege...

Aber
Anstatt sich mit den MFC Klassen rumzuplagen könnte man natürlich die Klassen aus der Standard Template Library (std::vector etc.) benutzen.
würde ich vorziehen ;)
 
Nein habe ich noch nicht aber das sieht soweit funktionsfähig aus. Rückgabewerte Mithilfe von Referenzen ziehe ich einer Zeigervariante vor. Später muss ich noch die Klasse CMap benutzten und dort wird das Problem auch auftauchen. Ganz unelegant könnte man auch ein globales CArray Objekt definieren und darauf hätte man dann immer Zugriff. Programmiere allerdings MFC und wollte die dort vorhandenen Klassen nutzen. Die wurden ja sicherlich auch erstellt um einem Arbeit abzunehmen. MFC ist zwar auch nicht so toll aber immer noch besser als die API Pogrammierung.

Grüße
LaciFux
 
Zurück