2009-10-19 11 views
1

J'essaye d'obtenir un double pour être une chaîne à travers la chaîne strings, mais ça ne marche pas.sstream ne fonctionne pas ... (STILL)

std::string MatlabPlotter::getTimeVector(unsigned int xvector_size, double ts){ 
    std::string tv; 
    ostringstream ss; 
    ss << "0:" << ts << ":" << xvector_size; 
    std::cout << ss.str() << std::endl; 
    return ss.str(); 
} 

Il ne sort que « 0 » sur ma console ...

Je travaille sur deux projets, à la fois avec le même problème. Je poste un différent, qui se heurte au même problème. Il est posté ici:
http://pastebin.com/m2dd76a63
J'ai trois classes PolyClass.h et .cpp, et le principal. La fonction avec le problème est PrintPoly. Est-ce que quelqu'un peut m'aider? Merci beaucoup

+0

S'il vous plaît seriez-vous reformater votre code à l'aide du "code" bouton? Cela rendra la lecture plus facile et rendra plus probable que vous obtiendrez de l'aide. – razlebe

+0

Le fichier? Quel fichier? – GManNickG

+0

Vous n'avez pas expliqué votre problème - vous mentionnez un fichier, mais votre exemple de code ne contient aucun fichier. – coppro

Répondre

4

Vous imprimez correctement, mais votre logique dans l'ordre d'impression est incorrecte. Je l'ai modifié pour fonctionner comme je le voulais, laissez-moi savoir si cela vous aide. http://pastebin.com/d3e6e8263

ancienne réponse:

Votre code fonctionne, bien que ostringstream est dans l'espace de noms std. Le problème est dans votre code d'impression de fichier. Puis-je voir votre appel à la fonction?

J'ai fait un test:

// #include necessary headers 
int main(void) 
{ 
    std::string s; 
    s = MatlabPlotter::getTimeVector(1,1.0); 
} 

La sortie que je reçois est 0:1:1

1

Je ne peux pas vraiment aider avec la partie « pas de sortie » de ce fait, comme vous ne l'avez pas montrer votre code qui essaie de sortir cela. En guise d'estimation, n'avez-vous pas mis une fin de vie là-bas d'une manière ou d'une autre? Certains systèmes ne donneront aucune sortie de texte jusqu'à ce qu'ils atteignent une nouvelle ligne. Vous pouvez le faire en virant un << std::endl sur votre ligne, ou un '\n' à votre chaîne.

Puisque vous n'en avez pas utilisé, vous devez utiliser le type std::ostringstream. Ceci est similaire à la façon dont vous deviez utiliser "std: string" au lieu de "string".

Aussi, était-ce moi, je me débarrasserais de cette variable temp et juste return ss.str(); C'est moins de code (pour éventuellement se tromper), et probablement moins de travail pour le programme.

+0

True - mais pas la cause du problème. – razlebe

+0

Je vois. J'ai ignoré cette connexion parce que vous n'avez pas réellement publié de code qui produit. Question éditée de manière appropriée. –

+0

Soulignant simplement que ce n'est pas la cause première, pour empêcher le gars qui pose la question de devenir plus confus ... aucune infraction intentionnelle. – razlebe

2

Le code suivant est 100% correct:

#include <iostream> 
#include <sstream> 
#include <string> 

// removed MatlabPlotter namespace, should have no effect 
std::string getTimeVector(unsigned int xvector_size, double ts) 
{ 
    // std::string tv; // not needed 
    std::ostringstream ss; 
    ss << "0:" << ts << ":" << xvector_size; 

    std::cout << ss.str() << std::endl; 

    return ss.str(); 
} 

int main(void) 
{ 
    // all work 
    // 1: 
    getTimeVector(0, 3.1415); 

    // 2: (note, prints twice, once in the function, once outside) 
    std::cout << getTimeVector(0, 3.1415) << std::endl; 

    // 3: (note, prints twice, once in the function, once outside) 
    std::string r = getTimeVector(0, 3.1415); 
    std::cout << r << std::endl; 
} 

Trouver où nous différons, qui est probablement votre source d'erreur. Parce qu'il s'arrête à votre double, je suppose que le double que vous essayez d'imprimer est l'infini, NaN (pas un nombre), ou un autre état d'erreur.

0

Eh bien, j'ai essayé le code lié et il sort pour moi

B 4 
A 5 
B 4 
C 3 
x^ + 5x^ + 3 

avant de s'écraser bien que l'accident se produit après PrintPoly. De regarder le code c'est ce que je m'attendais à imprimer. Êtes-vous en train de dire que vous n'obtenez pas d'entiers apparaissant après les lettres?

0

Merci à tous pour votre contribution! Pas sûr de l'erreur exacte, mais il doit y avoir un réglage dans XCode qui le gâche. J'ai fait un CMakeLists.fichier txt et compilé à partir du terminal en utilisant
cmake -G XCode .. et produit un projet XCode. Je l'ai couru, et maintenant ça marche bien ... maintenant quelqu'un pourrait-il savoir ce qui pourrait amener XCode à le faire? Je suis exécutant la version 3.2 avec les éléments suivants:
64 bits
versions des composants
Xcode IDE: 1610,0
Xcode de base: 1608,0
ToolSupport: 1591,0