-3
votes

Pourquoi ne puis-je pas retourner la matrice de chaîne de la fonction string?

Je voudrais utiliser ma fonction pour créer une matrice de chaîne, mais que la déclaration de ma ficelle ne fonctionne pas. xxx


0 commentaires

3 Réponses :


4
votes

Tout d'abord, votre fonction est déclarée pour renvoyer un single std :: string objet. Deuxièmement, vous retournerez tableau [12] qui est élément treize de votre tableau de douze éléments.

Et vous ne pouvez pas réellement retourner des tableaux simples des fonctions. Les matrices se décomposent aux pointeurs vers leur premier élément et que le pointeur deviendrait invalide immédiatement à mesure que la durée de vie de la matrice se termine lorsque la fonction renvoie.

Il existe quelques solutions: transmettez le tableau (comme un pointeur sur le premier élément) comme argument de la fonction. Ou retour par exemple std :: Array objet.


0 commentaires

1
votes

Votre problème est que vous avez la mauvaise syntaxe de ce que vous faites et que certaines d'entre elles ne sont pas possibles. Malheureusement, aucun des causes d'une erreur de compilation, cela ne fait que quelque chose d'autre, y compris un comportement non défini.

Vous devez déclarer la fonction comme ceci: p> xxx pré>

Vous pouvez 'T Renvoie un tableau, mais si vous l'enveloppez dans un std :: Array code>, vous pouvez. p>

puis faites-le à l'intérieur: P>

int main() {
    std::array<std::string, 12> array = input();
    for (std::string s : array) {
        std::cout << s << std::endl;
    }
    return 0;
}


1 commentaires

Merci à vous tous pour l'aide. Je l'obtiens, c'est propre maintenant.



3
votes

Array [12] code> est éteint la fin de votre matrice, et même si c'était dans les limites, ce serait une chaîne em>, pas une collection de chaînes. Les tableaux de style C ne sont pas assignables. std :: vecteur code> et std :: array code> sont des alternatives assignables. P>

for (int i = 0; i < 12; i++)
{
    result[i] = std::string(months[i], '-');
}


1 commentaires

Merci pour votre réponse. Je comprends. Nettoie maintenant.