array als referenz übergeben?
-
hallo,
ich möchte ein char-array als referenz an eine funktion übergebenvoid f (char& x[]) { // ... } int main() { char x[] = "hello, world"; f (x); }
das funzt nicht: --> error C2234: arrays of references are illegal
ich will aber kein 'array von referenzen', sondern eine 'referenz auf ein array' haben.
wie geht das?
danke!
-
Apeman
MitgliedBenutzerprofil
Anmeldungsdatum: 20.09.2007
Beiträge: 935356Junge Junge..
-
lol. So viele Beiträge und so wenig C++ Skill ;P
PS: char*& x
-
this->that schrieb:
PS: char*& x
geht auch nicht. --> cannot convert parameter 1 from 'char [13]' to 'char *&'
-
Was hast du eigentlich gegen einen stinknormalen Zeiger?
f(char *x); ??
Also mit 935359 sollte man sowas eigentlich wissen
(hehe das musst du dir jetzt bis zu deiner nächsten
Inkarnation anhören)
-
Ich frage mich, warum man eine Referenz auf einen Zeiger übergeben sollte und nicht gleich den Zeiger verwendet.
Grüße...
Heiko
-
Boar Apeman, du bist ja voll der Crack!!! So viele Beiträge!
Also wenn selbst DU es nicht hin bekommst, ist es wahrscheinlich ein Fehler im Compiler oder sogar ein Designfehler von C/C++ selbst!
:p
-
Bei mir geht das einwandfrei:
void foo(char*& f) { } ... char* str = "kthxbai"; foo(str);
-
Um zur eigentliche Frage zurückzukommen...
Der Kompiler bindet das Referenz-Zeichen an den Typ, obwohl du es an den Parameternamen binden willst. Hier helfen nur Klammern:void f (char (& x)[])
Allerdings wird dann der Kompiler meckern, weil er die Größe des Arrays nicht bei der Deklaration nicht kennt. Also fügen wir die auch noch hinzu:
void f (char (& x)[13])
So jetzt klappts, ist aber unschön, da die Funktion nur mit einem char Array der Länge 13 benutzt werden kann. Also müssen Templates her:
template <size_t N> void f (char (& x)[N])
Und schon läuft das Ganze.
Aber habe ich das nicht schon im anderen Thread geschrieben?
Naja, egalGruß
Don06
-
@Don06
danke! das wollte ich wissen.