2009-08-05 11 views
1

Je ne comprends pas pourquoi l'échec suivant:pourquoi ne pointeur sur un tableau ne retourne pas comme **

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

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

Merci

+1

Qu'est-ce que cela échoue à faire? Il compile pour moi. –

+0

oui ... il fait pour moi aussi, j'avais un type de données différent – vehomzzz

+1

alors si cela ne fonctionne toujours pas mettre à jour votre question pour inclure votre code exact avec vos types –

Répondre

1

D'abord, vous cela comme C baliser ++ et C. Qui est-il? C n'a pas de classe de chaînes. Si c'est du C++, supprimez le tag C, c'est trompeur (ce n'est pas la même langue!). Editer: J'ai mal compris ce que vous essayez de faire. Votre méthode devrait compiler. Vous devez juste vous rappeler de déréférencer le str retourné pour obtenir la chaîne.

Je traiter rarement avec double indirection, mais vous devez faire quelque chose comme ceci pour définir la chaîne:

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

Je ne sais pas comment vous utilisez l'opérateur d'adresse ici, car elle renvoie une référence et pas un pointeur.

pour définir la chaîne dans le tableau str. Votre méthode est vraiment bizarre. Le problème est que le compilateur ne sait pas que vous voulez déréférencer une chaîne, donc il essaie de déréférencer un char *. Je ne comprends pas pourquoi vous voulez faire comme ça, cependant. Il serait préférable de le faire:

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

retiré le "C" tag. Vous pouvez le faire w/rep> = 500. – azheglov

+0

Je mets string * str [] à titre d'exemple, j'utilise des classes différentes dans mon cas – vehomzzz

+0

oui ... bon point, c'est une question C++ donnée classes de chaînes ... si le Règle je m'intéresse est dans les deux langues .. – vehomzzz

Questions connexes