Schleifenvariable in String/Namen nutzen?!



  • Ahja, ich glaube ich hab falsch rum gedacht, und hab nun eine Idee, danke euch beiden 🙂

    EDIT: Das Problem ist, nun bekomme ich einen Absturz, da ich noch irgendwie den Namen der Canvas mit verarbeiten muss, bzw bei der Definition der Canvas die Variable im Namen mit einbinden sollte.



  • du willst das c_%i zu dem hier machen:
    c_1
    c_2
    c_3 ....

    ??

    das ist doch vom prinzip her einfach. du nimmst dir den string "c_" und hängst die zahl einfach dran (eventuell je nachdem wie du es machst über den umweg der konvertierung nach string)

    aber dass dein programm deswegen abstürzen sollte erscheint mir fragwürdig. hast du auf die array grenzen geachtet und diese nicht überschritten? (0 -> GROESSE-1)



  • Skym0sh0 schrieb:

    du willst das c_%i zu dem hier machen:
    c_1
    c_2
    c_3 ....

    ??

    das ist doch vom prinzip her einfach. du nimmst dir den string "c_" und hängst die zahl einfach dran (eventuell je nachdem wie du es machst über den umweg der konvertierung nach string)

    aber dass dein programm deswegen abstürzen sollte erscheint mir fragwürdig. hast du auf die array grenzen geachtet und diese nicht überschritten? (0 -> GROESSE-1)

    Genau das hatte ich vor, dachte mir, dass es einfach sein sollte, ich steh nur etwas auf dem Schlauch was die Konvertierung angeht bzw, WIE man es richtig anhängt. 😞



  • Grimnok schrieb:

    C++ in root.

    Was ist das?



  • ???????? schrieb:

    Grimnok schrieb:

    C++ in root.

    Was ist das?

    http://de.wikipedia.org/wiki/ROOT



  • std::string getStr(std::string const& s, int number)
    {
        std::stringstream ss;
        ss << s << number;
    
        return ss.str();
    }
    


  • Hey danke, ich hab hier im FAQ unterdessen weitergelesen und Int to Str gefunden und umgesetzt.

    Es fehlt mir aber immernoch die essentielle Antwort 😕

    Mit welchem Befehl setz ich das denn nun dann an den Namen dran? Ich muss doch hier: new TCanvas("c_ noch irgend etwas dranschreiben?



  • Hat Skym0sh0 doch schon geschreiben?!



  • Tachyon schrieb:

    Hat Skym0sh0 doch schon geschreiben?!

    Hat er/sie?

    Ich hab nun:

    const Int_t pad_i = 16;       
     TCanvas *canvases[pad_i]; 
    
     for (Int_t i=1; i<pad_i; ++i)
     {
    
        ostringstream Str;
        Str << i;
        string ZahlAlsString(Str.str());
        cout << ZahlAlsString << endl; 
        canvases[i] = new TCanvas("c_%i","TestCanvas",50,50,1024,768);
    }
    

    Läuft, aber mit:

    Warning in TCanvas::Constructor: Deleting canvas with same name: c_%i



  • Und wie soll er c_%i mit dem erstzen, dass Du mit dem stream zusammengebaut hast? Durch Magie? Du musst schon etwas nachdenken, und ZahlAlsString vielleicht auch irgendwie mal benutzen...



  • Tachyon schrieb:

    Und wie soll er c_%i mit dem erstzen, dass Du mit dem stream zusammengebaut hast? Durch Magie? Du musst schon etwas nachdenken, und ZahlAlsString vielleicht auch irgendwie mal benutzen...

    Ja hast Du natürlich recht 🤦

    Trotzdem, ich "kenne" das Zugreifen auf solche Variablen (%s müsste es ja nun sein) nur in sprintf Kommands mit eben "_%s", Variable, das tut sich aber in dem Kontext leider nicht. Ich steh da grade schon auf dem Schlauch und wäre über die Lösung sehr dankbar, dann kann ich sie zumindest im Reverseuntersuchungsgedankengang verstehen.



  • Ausnahmsweise mal...

    const Int_t pad_i = 16;      
    TCanvas *canvases[pad_i];
    
    for (Int_t i=1; i<pad_i; ++i)
    {
        ostringstream Str;
        Str << "c_" << i;
        canvases[i] = new TCanvas(Str.str().c_str(), "TestCanvas",50,50,1024,768);
    }
    


  • Grimnok schrieb:

    C++ in root.

    *sigh* als ich "Histogramm" und "Canvas" gelesen hab hab ichs geahnt. Ein Jahr lang hab ich mich mit dem Scheiß für meine Diplomarbeit rumschlagen müssen, bin immernoch traumatisiert 😉

    Hier ein Lösungsansatz:

    const Int_t pad_i = 16;      
     TCanvas *canvases[pad_i];
    
     for (Int_t i=1; i<pad_i; ++i)
     {
        ostringstream sstr;
        sstr << "c_" << i;
        string canvasName = sstr.str();
        canvases[i] = new TCanvas(sstr.c_str(),"TestCanvas",50,50,1024,768);
    }
    


  • Danke ihr beiden, nun hab ich das Konzept auch durchaus besser verstanden. Und kanns anderweitig nutzen.

    @pumuckl: Ja Root... ein Quell ewiger Freude... Ist halt zu der Zeit in der Uni nichts mit "wir lernen C++ von der Pike" sondern eher "Also das is Root, mach mal".


Anmelden zum Antworten