Switch in Klasse wird nicht Inline expandiert ???



  • Moin,

    Ich möchte mir nen kleinen Hp-Generator basteln und dafür brauch ich ne
    Klasse die mir die verschiedenen Vorlagen etc. immer bereit hält.

    Nun alles schön und gut, dennoch bekomm ich folgendes gesagt :

    C:\Programme\Borland\CBuilder6\Bin>BCC32 waldi.cpp
    Borland C++ 5.6 für Win32 Copyright (c) 1993, 2002 Borland
    waldi.cpp:
    Warnung W8027 waldi.cpp 499: Funktionen, die switch enthalten, werden nicht als
    Inline expandiert
    Turbo Incremental Link 5.60 Copyright (c) 1997-2002 Borland
    

    Meine Frage was meinen "die" mit, werden nicht als Inline expandiert ?

    Das hier ist meine Klasse :

    class Vorlage {
            public:
                    int getVorlage() {
                            return myTemp;
                    }
                    void setVorlage(int temp) {
                            myTemp = temp;
                    }
                    int getHTML() {
                            cout << "\nFolgender HTML-Code liegt bei: \n\n\n";
                            switch (myTemp) {
                                   case 1 : cout << "<html>\n<title>Test</title>\n<body>\n\nTEST\n\n</body>\n</html>"; break;
                                   case 2 : cout << "<html>\n<title>Test</title>\n<body>\n\nTEST2\n\n</body>\n</html>"; break;
    
                                   default: cout << "Vorlage exestiert nicht !"; break;
                            }
                            return 0;
                    }
    
                    int htmlcode;
            private:
                    int myTemp;
    };
    

    Frage[2]: Wieso kommt bei der Ausgabe im Dos Fenster immer am Ende ne 0 ?!? Klar ist, es liegt am return, aber wie bekomm ich das weg ?

    Ausgabe wäre:

    Es wurde die Vorlage: 1 gewaehlt !
    Folgender HTML-Code liegt bei:
    
    <html>
    <title>Test</title>
    <body>
    
    TEST
    
    </body>
    </html>0
    

    greets
    sphonyx



  • Must uns schon zeigen wie du Vorlage::getHTML() aufrufst.
    Nehme an du machst

    cout << somevar.getHTML();
    

    wenns so ist dann besser

    somevar.getHTML();
    


  • Implementier die Memberfunktion ausserhalb der Deklaration. Dann kommt die Warnung nicht mehr.



  • Für Leute die das gleiche Problem haben :

    int main() {
    
            Vorlage *temp1 = new Vorlage;
    
            //Setze Vorlage
            (*temp1).setVorlage(1);
            cout << "Es wurde die Vorlage: " << (*temp1).getVorlage() << " gewaehlt !\n\n";
    
            //Hole HTML-CODE
            cout << (*temp1).getHTML();
    
    }
    

    ^^ mein Aufruf der var mit pointern

    Durch das verbessern von

    cout << (*temp1).getHTML();
    

    auf

    (*temp1).getHTML();
    

    ist schonmal die 0 futsch 😉



  • a) Du solltest den Speicher wieder freigeben
    b) Anstatt (*a).b kann man einfach a->b schreiben

    Gruß



  • Habe die Ausgaben alle aufgehoben, da ich den Code nun in Borland benutzen will und das nicht als Consolen-Andwendung:

    Da temp1->getHTML(); mir meinen Html Source wiedergibt habe ich dies hier versucht, um den Source in eins meiner TEXT-labels zu pressen :

    AnsiString var;     //* AnsiString, da String in Label muss
                    int getHTML() {
                            /* Only in DOS: cout << "\nFolgender HTML-Code liegt bei: \n\n\n"; */
                            switch (myTemp) {
                                   case 1 : var = "<html>\n<title>Test</title>\n<body>\n\nTEST\n\n</body>\n</html>"; break;
                                   case 2 : var = "<html>\n<title>Test</title>\n<body>\n\nTEST2\n\n</body>\n</html>"; break;
    
                                   default: /* Only in DOS: cout << "Vorlage exestiert nicht !"; */ break;
                            }
                    }
    
    Label8->Caption = temp1->getHTML();                     //* HTML-Code auslesen
    

    Das Text-label ändert sich, aber nicht mit dem von mir geforderten Source sondern, mit einer komischen Nummer (1244884)
    Was ist das ?



  • dein getHTML() sollte ein int zurückgeben. Du gibst aber nichts zurück ( kein return ) also ist der rückgabewert undefiniert.
    machs so

    AnsiString getHTML() {
                            /* Only in DOS: cout << "\nFolgender HTML-Code liegt bei: \n\n\n"; */
                            AnsiString var;
                            switch (myTemp) {
                                   case 1 : var = "<html>\n<title>Test</title>\n<body>\n\nTEST\n\n</body>\n</html>"; break;
                                   case 2 : var = "<html>\n<title>Test</title>\n<body>\n\nTEST2\n\n</body>\n</html>"; break;
    
                                   default: /* Only in DOS: cout << "Vorlage exestiert nicht !"; */ break;
                            }
                    } 
                    return var;
                 }
    


  • Ok danke, hiermit funtzt es :

    AnsiString getHTML() {
                            /* Only in DOS: cout << "\nFolgender HTML-Code liegt bei: \n\n\n"; */
                            AnsiString var;
                            switch (myTemp) {
                                   case 1 : var = "<html>\n<title>Test</title>\n<body>\n\nTEST\n\n</body>\n</html>"; break;
                                   case 2 : var = "<html>\n<title>Test</title>\n<body>\n\nTEST2\n\n</body>\n</html>"; break;
    
                                   default: /* Only in DOS: cout << "Vorlage exestiert nicht !"; */ break;
                            }
                            return var;
                    }
    

Anmelden zum Antworten