J'ai une fonction dans une classe qui retourne une chaîne. Dans cette fonction, je ne peux l'obtenir que lorsque j'ajoute à la fonction avant l'instruction return. Une idée de pourquoi c'est, ou comment je peux le réparer? Je suis en cela dans Eclipse sur un MacLa fonction C++ qui retourne la chaîne ne fonctionne pas à moins qu'il y ait un endl impliqué ...?
Dans "main.cpp":
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cstdlib>
#include "Braid.h"
using namespace std;
static int size=3;
int main(){
Braid * b1 = new Braid(size);
b1->setCanon();//creates canonical braid.
cout<<"a ";
cout<<b1->getName()<<endl;
cout<<" b ";
}
Dans "Braid.h":
public:
Braid(int);
void setCanon();
string getName();
};
Et dans "Braid.cpp":
string Braid::getName(){
string sName="";
/* body commented out
for(int i=0; i<height; i++)
{
for(int j=2; j<(width-2); j++)
{
sName += boxes[i][j];
sName += "|";
}
}
*/
//cout<<endl;
return sName;
}
Quand je lance mon code principal, sans que le corps de cette fonction a commenté, la sortie que je reçois est
"a 0 | 0 | 12 | 12 | 0 | 0 | 2 | 1 | 1 | 1 | 1 | 2 |"
Le "nom" qu'il renvoie est correct, mais il ne dépasse pas l'appel de fonction. Si je décommentez la ligne //cout<<endl
, la fonction fonctionne et ma sortie est
"un 0 | 0 | 12 | 12 | 0 | 0 | 2 | 1 | 1 | 1 | 1 | 2 |
b"
Après avoir commenté le corps de la fonction, afin qu'elle crée seulement une chaîne vide, et la renvoie, ma sortie est seulement "a" puis si j'ajoute l'endl back, j'obtiens le "ab" attendu.
Qu'est-ce que je fais mal? Y at-il quelque chose qui vient avec endl que je manque?
Cela a fait l'affaire. Je suppose que cout ne fonctionne pas exactement comme je le pensais. Quoi qu'il en soit, merci! – Perchik
cout n'est pas vraiment une déclaration d'impression autant que quelque part pour stocker une sortie. – helloandre