Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage zu Funktions-Templates

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.03.2008, 17:23 Uhr
gipfelstuermer



Hallo,
kann mir jemand sagen, warum das Programm nicht funiktioniert? Das ist nur ein Übungsprogramm, das ich schreiben soll ohne grösseren Hintergedanken. Soll, wenn zwei AnsiStrings übergeben worden sind abbrechen und eien -1 zurückgeben.

C++:

template <typename t> t Div(t a, t b)
{
           t  rueckgabe;


        if  ( (typeid(a)==typeid(AnsiString))||(typeid(b)==typeid(AnsiString))   )
             {
                cout <<"Division nicht möglich!!";
                rueckgabe="-1"; // hier ist der Fehler
                // Es wird moniert, dass es nicht möglich ist
                // von char * nach int zu konvertieren
                return(rueckgabe);

             }


        rueckgabe=a/b;
  return(rueckgabe) ;
}

int main(int argc, char* argv[])
{
       int zahl1,zahl2;
       AnsiString string1,string2;
       zahl1=6;
       zahl2=2;
       string1="test1";
       string2="test2";
       int er2=Div(zahl1,zahl2);
       return 0;
}



Es geht mir nur, um das Verständnis. Ich kann das Programm nicht kompilieren. Wieso springt er überhaupt in die if-Klausel rein, wenn das integer Zahlen sind?? Wenn das interger oder float Zahlen sind, soll er überhaupt nicht in die if-Klausel springen. Wieso guckt denn der Compiler da nach?? Verstehe ich absolut nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.03.2008, 17:59 Uhr
Tommix



Hallo,
das if verhindert nicht das Compilieren sondern die Ausführung. Zum "reinspringen" kommt er ja gar nicht. Du müßtest spezialisieren (für AnsiString eine gesonderte Version schreiben).
Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.03.2008, 21:47 Uhr
ao

(Operator)



Zitat von gipfelstuermer:


C++:

       int er2=Div(zahl1,zahl2);



Dieser Aufruf konkretisiert die Schablone für t = int, also:

C++:
int Div(int a, int b)
{
           int  rueckgabe;

        // diese Bedingung ist fuer int nie erfuellt
        // - spielt aber keine Rolle, kompilieren muss es trotzdem!
        if  ( (typeid(a)==typeid(AnsiString))||(typeid(b)==typeid(AnsiString))   )
             {
                cout <<"Division nicht möglich!!";
                rueckgabe="-1"; // hier ist der Fehler
                // Es wird moniert, dass es nicht möglich ist
                // von char * nach int zu konvertieren
              
                // klar, denn int rueckgabe = "-1"; geht nun mal nicht.
                // Ausgewertet wird das zur Compile-Zeit, nicht zur Laufzeit.

                return(rueckgabe);

             }


        rueckgabe=a/b;
  return(rueckgabe) ;
}



ao

Dieser Post wurde am 18.03.2008 um 21:49 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: