Je suis un débutant qui essaie d'apprendre en faisant. Je veux envoyer une chaîne de caractères dans une fonction de membre de classe appelée "print()" mais j'obtiens des erreurs. Une fois que cela fonctionne, je peux continuer à écrire plus de fonctions de membre de classe qui fonctionnent avec les données que je les nourris.J'alimente une chaîne de caractères à une fonction de membre de la classe
Pour l'instant j'ai créé une classe qui a une fonction membre 'print'.
class Month
{
public:
string m_month;
void print()
{
cout << m_month << endl;
}
};
Ensuite, j'initialisée 12 mois:
Month month1 = { "January" };
Month month2 = { "February" };
Month month3 = { "March" };
etc.
Quand j'appelle "month1.print();" il imprime Janvier ce qui est correct.
J'ai utilisé stringstream et une boucle for pour concaténer les mois + 1 à 12 et je veux donner la fonction strings à la fonction d'impression.
stringstream os;
string mValue = "month";
int iValue = 1;
for(int i = 0; i < 12; ++i)
{
os << mValue << "" << iValue << "\n";
iValue += 1;
}
Cependant, le flux de chaîne ne peut pas être combiné avec la fonction d'impression.
os.print(); and os.str().print();
résultat dans "l'erreur: 'std :: stringstream {alias classe std :: __ cxx11 :: basic_stringstream}' n'a pas membre nommé 'print'"
Conversion du stringstream char, puis le nourrir dans les résultats de la fonction d'impression en « erreur: demande de membre « print » dans « CSTR », qui est de type non-classe « const char * » »
const string tmp = os.str();
const char* cstr = tmp.c_str();
cstr.print();
longue histoire courte: Ce que je suis en train de faire concatène le mois + 1 à 12 et le transmet à la fonction membre "print". Cela semble trivial mais je n'arrive pas à le faire fonctionner. Aucune suggestion?
Edit: code complet:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
class Month
{
public:
string m_month;
void print()
{
cout << m_month << endl;
}
};
int main()
{
Month month1 = { "January" };
Month month2 = { "February" };
Month month3 = { "March" };
Month month4 = { "April" };
Month month5 = { "May" };
Month month6 = { "June" };
Month month7 = { "July" };
Month month8 = { "August" };
Month month9 = { "September" };
Month month10 = { "October" };
Month month11 = { "November" };
Month month12 = { "December" };
stringstream os; // Initialize stringstream "os"
string mValue = "month"; // Initialize mValue "month"
int iValue = 1; // Initialize iValue "1"
for(int i = 0; i < 12; ++i)
{
os << mValue << "" << iValue << "\n"; // Glue mValue and iValue
// together
iValue += 1; // Increment iValue by one
}
send stringstream "os" to the print function // mock code: Here I want to send month1.print(); month2.print(); etc. to the print function. The output should be January, February etc.
return 0;
}
Il est difficile de comprendre ce que vous essayez de faire avec 'os.print();'. L'impression n'est pas une méthode de la chaîne de caractères, comme le dit l'erreur. Aviez-vous l'intention d'assigner la chaîne stringstream à 'm_month'? De plus, vous n'utilisez jamais les variables du mois. Je ne suis pas sûr de ce que votre boucle avec iValue est supposée faire. Précisez s'il vous plaît. – Carcigenicate
Attendez, essayez-vous d'obtenir les objets month avec le mValue for-loop? – Carcigenicate
Je n'utilise probablement pas la bonne terminologie ici, mais ce que j'ai fait, c'est que j'ai créé une classe avec les membres 'm_month' et 'print'. J'ai initialisé les mois 1 à 12, donc quand j'appelle 'month1.print();' il imprime 'Janvier'; 'month2.print();' imprime 'février' et ainsi de suite. Pour l'instant, je veux que le programme imprime 'Janvier, Février, Mars, etc' sans avoir à taper 'month1.print(); à month12.print(); C'est à ça que sert la boucle for. Il incrémente et concatène 'month1 à 12' que je veux ajouter à la fonction d'impression. Je vais poster le code complet dans le message original. – TwoGoldFish