2009-08-05 16 views
1

Ich verstehe nicht, zurückzukehren, warum die folgenden fehlschlägt:warum Zeiger auf Array ausfällt als **

#include<string> 
class Foo 
{ 
    public: 
    std::string** GetStr(){return str;}  

private: 
    std::string * str[10]; 
}; 

Dank

+1

Was kann es tun? Es kompiliert für mich. –

+0

ja ... tut es auch für mich, ich hatte einen anderen Datentyp – vehomzzz

+1

dann, wenn es immer noch nicht funktioniert Update Ihrer Frage, um Ihren genauen Code mit Ihren Typen –

Antwort

1

Zuerst Sie dies als C++ markieren und C. Welche ist es? C hat keine String-Klasse. Wenn es C++ ist, entfernen Sie bitte das C-Tag, es ist irreführend (sie sind nicht die gleiche Sprache!).

Edit: Ich missverstanden, was Sie versuchen zu tun. Ihre Methode sollte kompilieren. Sie müssen nur daran denken, die zurückgegebene Zeichenfolge zu dereferenzieren, um die Zeichenfolge zu erhalten.

ich selten mit Doppel indirection beschäftigen, aber Sie haben, so etwas zu tun, um die Zeichenfolge zu setzen:

*(*str) = "STR"; //or 
*(str[i]) = "STR"; 

Ich weiß nicht, wie Sie den Adressoperator hier verwenden würde, weil es einen Verweis zurückgibt und kein Zeiger.

, um die Zeichenfolge im str-Array festzulegen. Deine Methode ist wirklich seltsam. Das Problem besteht darin, dass der Compiler nicht weiß, dass Sie eine Zeichenfolge dereferenzieren möchten, also versucht er, ein char * zu dereferenzieren.

Ich verstehe nicht, warum Sie es so machen wollen, obwohl. Es wäre besser, dies zu tun:

std::string str[10]; 
std::string* GetStr() { return str; } 
+0

entfernt das "C" -Tag. Du kannst das mit rep> = 500 tun. – azheglov

+0

Ich gebe string * str [] zum Beispiel, verwende ich verschiedene Klassen in meinem Fall – vehomzzz

+0

ja ... guter Punkt, es ist C++ Frage angegebene String-Klassen ... obwohl die Regel, die ich interessiere, ist in beiden Sprachen. – vehomzzz