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
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
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; }
entfernt das "C" -Tag. Du kannst das mit rep> = 500 tun. – azheglov
Ich gebe string * str [] zum Beispiel, verwende ich verschiedene Klassen in meinem Fall – vehomzzz
ja ... guter Punkt, es ist C++ Frage angegebene String-Klassen ... obwohl die Regel, die ich interessiere, ist in beiden Sprachen. – vehomzzz
Was kann es tun? Es kompiliert für mich. –
ja ... tut es auch für mich, ich hatte einen anderen Datentyp – vehomzzz
dann, wenn es immer noch nicht funktioniert Update Ihrer Frage, um Ihren genauen Code mit Ihren Typen –