string array als reference übergeben?
-
Hallo ich möchte einen String-Array mit 2 Dimensionen als reference übergeben.
#include <iostream> #include <string.h> using namespace std; void SetName(string& name[5][2]) { name[0][0] = "Nachname 1"; name[0][1] = "Vorname 1"; name[1][0] = "Nachname 2"; name[1][1] = "Vorname 2"; name[2][0] = "Nachname 3"; name[2][1] = "Vorname 3"; name[3][0] = "Nachname 4"; name[3][1] = "Vorname 4"; name[4][0] = "Nachname 5"; name[4][1] = "Vorname 5"; } int main() { string name[5][2]; SetName(name); for(int x = 0; x < 5; x++) { cout << name[x][0] << endl; cout << name[x][1] << endl; } }Wenn ich das compilieren möchte bekomme ich einen haufen Fehler
Fehler 1 error C2234: 'name': Arrays aus Verweisen sind unzulässig d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 6 testName Fehler 2 error C2440: '=': 'const char [11]' kann nicht in 'std::string *' konvertiert werden d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 8 testName Fehler 3 error C2440: '=': 'const char [10]' kann nicht in 'std::string *' konvertiert werden d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 9 testName Fehler 4 error C2440: '=': 'const char [11]' kann nicht in 'std::string *' konvertiert werden d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 11 testName Fehler 5 error C2440: '=': 'const char [10]' kann nicht in 'std::string *' konvertiert werden d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 12 testName Fehler 6 error C2440: '=': 'const char [11]' kann nicht in 'std::string *' konvertiert werden d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 14 testName Fehler 7 error C2440: '=': 'const char [10]' kann nicht in 'std::string *' konvertiert werden d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 15 testName Fehler 8 error C2440: '=': 'const char [11]' kann nicht in 'std::string *' konvertiert werden d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 17 testName Fehler 9 error C2440: '=': 'const char [10]' kann nicht in 'std::string *' konvertiert werden d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 18 testName Fehler 10 error C2440: '=': 'const char [11]' kann nicht in 'std::string *' konvertiert werden d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 20 testName Fehler 11 error C2440: '=': 'const char [10]' kann nicht in 'std::string *' konvertiert werden d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 21 testName Fehler 12 error C2664: 'SetName': Konvertierung des Parameters 1 von 'std::string [5][2]' in 'std::string *[][2]' nicht möglich d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 28 testName Fehler 13 error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich) d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 32 testName Fehler 14 error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich) d:\dokumente\visual studio 2008\projects\c++\test\testname\testname\testname.cpp 33 testNamewarum const char?? da ist doch kein char...
-
Lass einfach mal das & hinter string weg, d.h. du übergibst nur das Array direkt, also so:
#include <iostream> #include <string> //string.h gibt es nicht using namespace std; void SetName(string name[5][2]) { name[0][0] = "Nachname 1"; name[0][1] = "Vorname 1"; name[1][0] = "Nachname 2"; name[1][1] = "Vorname 2"; name[2][0] = "Nachname 3"; name[2][1] = "Vorname 3"; name[3][0] = "Nachname 4"; name[3][1] = "Vorname 4"; name[4][0] = "Nachname 5"; name[4][1] = "Vorname 5"; } int main() { string name[5][2]; SetName(name); for(int x = 0; x < 5; x++) { cout << name[x][0] << endl; cout << name[x][1] << endl; } }Was dein Code nämlich machen würde, wenn er funktionieren würde, wäre, dass du ein Array von Referenzen auf strings übergibst. Und wie der Compiler dir schon richtig sagt, gibt es keine Arrays von Referenzen.
Du musst allerdings auch gar keine Referenz verwenden, da Arrays bei Übergabe an Funktionen immer implizit in Zeiger umgewandelt werden (d.h. einen Zeiger auf das erste Element, das heißt, du übergibst quasi einen Zeiger auf ein 2-elementiges Array von String), das nennt sich Decay. Du könntest also statt
void SetName(string name[5][2])auch
void SetName(string (*name)[2])schreiben.
Hoffe, das hilft etwas
Felix
EDIT: Was mit const char[] gemeint ist: String-Literale, das heißt Ausdrücke der Form "text" sind intern vom Typ const char[], bzw. (wie oben schon angedeutet, Arrays und Zeiger sind in vielen Fällen "ähnlich") const char*. Und der Compiler beschwert sich, dass er die const char[]-Literale nicht in Zeiger auf strings umwandeln kann, weil er anscheinend deinen an sich falschen Typ von string &name[5][2] falsch interpretiert und dann an Zeiger auf strings denkt...
-
oder alternativ eine Referenz auf ein Array benutzen:
void SetName(string (&name)[5][2]);
-
Stimmt, campers Lösung ist wahrscheinlich näher an dem, was du dir vorgestellt hast, wenn du eine Referenz benutzen möchtest... Schade, dass mir das nicht eingefallen ist :D, ist wohl doch schon etwas zu spät geworden.
Felix
-
Danke es geht.