Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » rückgabe-typ

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
29.06.2004, 12:01 Uhr
songbird



Hallo!

Stimmt es dass eine Methode als Rückgabetyp kein Array haben darf???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.06.2004, 12:05 Uhr
(un)wissender
Niveauwart


nee
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.06.2004, 12:08 Uhr
songbird



Was will uns dann dieser Fehler sagen:

"Declaration does not declare anything"


C++:
Staff[] getMembers();

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.06.2004, 13:04 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Das das keinen Sinn macht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.06.2004, 13:05 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


doch ist richtig du kannst direkt kein array zurückgeben... nur einen zeiger, oder ein beliebig komplexen datentyp, der selber auch ein array enthalten kann (sollte man aber nich machen)
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.06.2004, 13:18 Uhr
ao

(Operator)



Zitat:
Windalf postete
doch ist richtig du kannst direkt kein array zurückgeben... nur einen zeiger, oder ein beliebig komplexen datentyp, der selber auch ein array enthalten kann (sollte man aber nich machen)

Warum denn nicht? So als Pauschalaussage ist das meiner Meinung nach falsch. Wenn eine größere Menge Daten aus einer Funktion herausgeholt werden sollen, ist es gleich, ob das über einen Call-by-Reference-Parameter oder über den Rückgabewert geschieht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
29.06.2004, 13:22 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@ao
ich meinte damit das man vielleicht nicht unbedingt sowas machen sollte


C++:
std::vector<int> get_was_auch_immer();//die funktion ballert den zurückgelieferten vector richtig voll

std::vector<int> myvec= get_was_auch_immer(); //das hier kann dann den todesstoss bedeuten...


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
29.06.2004, 13:26 Uhr
songbird



danke Windalf . Da wissen wir jetzt wo unser Fehler lag.

Aber mit einem Vector müsste es gehen oder?

edit: hab deinen letzten Beitrag erst danach gelesen... Dann geht's mitm Vector auch nicht??

Dieser Post wurde am 29.06.2004 um 13:28 Uhr von songbird editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.06.2004, 13:30 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Aber mit einem Vector müsste es gehen oder?


da ich den code nicht kenne weiss ich das nicht, aber gib doch einfach einen zeiger auf ein array zurück... wenn der speicherbreich nicht nur innerhalb deiner methode gültig ist funzt das auch genauso wie du dir vorgestellt hast... oder du übergibst deiner funktion einen zeiger auf ein speierbereich den du vorher für die funktion angelegt hast.... die funktion müllt dann da im array rum und wenn die durchgelaufen ist, kannst du damit weiterarbeiten...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.06.2004, 13:50 Uhr
ao

(Operator)


Zeiger auf irgendwelche Daten zurückzugeben ist zwar hoch performant, schafft aber enge Verquickungen zwischen der Funktion und dem Aufrufer.

Der Aufrufer muss wissen, woher die Funktion den betreffenden Speicher bekommen hat (dynamisch oder statisch), weil er ihn (je nachdem) nach Benutzung wieder freigeben muss oder nicht freigeben darf. Das bedeutet, man kann das Speichermanagement der Funktion nicht ändern, ohne alle (!) Aufrufstellen anzupassen. So was darf man sich nur ans Bein hängen, wenn ganz wichtige Gründe dafür sprechen.

Ein Ausweg ist

C++:
int get_was_auch_immer (std::vector<int> & rnDataVec);



D.h. der Aufrufer beschafft das Vector-Objekt, reicht es der Funktion über Call-by-reference rein, bekommt es ausgefüllt zurück und ist auch für die umweltgerechte Entsorgung verantwortlich.

Hier sind die Kompetenzen klar verteilt, und es ist nicht weniger performant.

Dieser Post wurde am 29.06.2004 um 13:50 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: