Intergerwert ausgeben in Vs 2005



  • Hallo,

    Ich hab ein Problem!
    Ich möchte gern meinen integer Wert ausgeben lassen mit hilfe des cout streams. Jedoch melden sich beim debuggen lauter Fehlermeldungen die sagen: "Mehrdeutiger Aufruf einer überladenen Funktion" und noch lauter anderer Kram.

    Ich hab es dann mit float versucht wie unten angezeigt und damit funktioniert es.
    Nun stellt sich die Frage warum es mit float funktioniert und mit int nicht?

    Vielleicht kann mir ja einer die Lösung nennen!

    Ich nutze Vs 2005 und ein leeres win32-Konsolenprojekt mit selbst eingefügter cpp datei.

    #include <iostream>

    using namespace std;

    int main()
    {
    int zahl = 10;
    cout << (float)zahl;
    return 0;
    }

    grüße



  • Eigentlich müssten es wenn Warnings sein. Eben wegen Mehrdeutigkeit. Ist es ein int, ein unsigned int usw.? Mit (int) davor müsste es auch gehen. Müsste.



  • Die Fehlermeldungen kommen beim Debuggen? Na, dann ist's doch nicht schlimm, das Compilieren lief ja offenbar fehlerfrei durch. Dann ist doch nur wichtig, ob die Zahl auch auf dem Bildschirm erscheint.

    Falls die Fehlermeldungen doch beim Compilieren erscheinen: Bitte zeigen.



  • Hallo,

    nein es sind Fehler, keine Warnungen. Das Casting auf int geht nicht. ich poste mal die Fehler:

    c:\programme\microsoft visual studio 8\vc\include\xlocnum(842) : error C2668: 'std::num_put<_Elem,_OutIt>::do_put': Mehrdeutiger Aufruf einer überladenen Funktion
    with
    [
    _Elem=char,
    _OutIt=std::ostreambuf_iterator<char,std::char_traits<char>>
    ]
    c:\programme\microsoft visual studio 8\vc\include\xlocnum(949): kann 'std::ostreambuf_iterator<_Elem,_Traits> std::num_put<_Elem,_OutIt>::do_put(_OutIt,std::ios_base &,_Elem,long double) const' sein
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>,
    _OutIt=std::ostreambuf_iterator<char,std::char_traits<char>>
    ]
    c:\programme\microsoft visual studio 8\vc\include\xlocnum(908): oder "std::ostreambuf_iterator<_Elem,_Traits> std::num_put<_Elem,_OutIt>::do_put(_OutIt,std::ios_base &,_Elem,double) const"
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>,
    _OutIt=std::ostreambuf_iterator<char,std::char_traits<char>>
    ]

    Das sind noch längst nicht alle... aber haben die selbe ursache.



  • Die Fehler kommen beim Kompilieren.

    grüße



  • alica2005 schrieb:

    Die Fehler kommen beim Kompilieren.

    grüße

    Jo, ist auch richtig so. Wenn er zwei gleichwerte Funktionsaufrufe hat, weiss es nicht, welchen er nehmen soll, und darf sich auch nicht einfach einen aussuchen.

    Setze evtl. mal Dein Projekt neu auf. Der Fehler ist so eigentlich nicht nachvollziehbar.
    Evtl. hilft es auch, den Namespace explzit zu qualifizieren, anstatt ihn komplett in den globalen zu importieren:

    #include <iostream>
    
    //das hier weg
    //using namespace std;
    
    int main()
    {
       int zahl = 10;
       std::cout << zahl; //hier ein std davor
       return 0;
    }
    

    Trotzdem sollte es eigenltich gehen.



  • alica2005 schrieb:

    Das Casting auf int geht nicht. ich poste mal die Fehler:

    c:\programme\microsoft visual studio 8\vc\include\xlocnum(842) : error C2668: 'std::num_put<_Elem,_OutIt>::do_put': Mehrdeutiger Aufruf einer überladenen Funktion
    with
    [
    _Elem=char,
    _OutIt=std::ostreambuf_iterator<char,std::char_traits<char>>
    ]
    c:\programme\microsoft visual studio 8\vc\include\xlocnum(949): kann 'std::ostreambuf_iterator<_Elem,_Traits> std::num_put<_Elem,_OutIt>::do_put(_OutIt,std::ios_base &,_Elem,long double) const' sein ...

    das kann eigentlich nur passieren, wenn die Header-files der Standardbibliothek fehlerhaft sind. Entweder fehlt in xlocnum die Methode do_put( .., long ) oder in ostream ist der value-Typ beim Aufruf von num_put::put manipuliert worden.

    Schau Dir mal das Datum der Files in <c:\programme\microsoft visual studio 8\vc\include> an. Ist eines von denen erst kürzlich geändert worden oder hat eines ein neueres Datum als alle anderen?

    Im Zweifel hilft hier nur VC8 noch mal installieren (wenn Du keinen PC mit identischer Installation zur Hand hast).

    Gruß
    Werner



  • Werner Salomon schrieb:

    das kann eigentlich nur passieren, wenn die Header-files der Standardbibliothek fehlerhaft sind...

    Das kann auch passieren, wenn z.B. über das Projekt irgendwelche Defines falsch gesetzt sind, und dadurch Definitionen mehrfach angezogen werden. Deshalb könnte es reichen, das Projekt neu aufzusetzen.



  • Tachyon schrieb:

    Das kann auch passieren, wenn z.B. über das Projekt irgendwelche Defines falsch gesetzt sind, und dadurch Definitionen mehrfach angezogen werden. Deshalb könnte es reichen, das Projekt neu aufzusetzen.

    im Prinzip ja - aber in diesem Fall schwer vorstellbar.

    Der Compiler versucht zweifellos einen Typ (int-Typ?) in einen double zu konvertieren. Wenn es eine Methode mit einem int-Typ (int, long, usw.) gäbe, würde der Compiler das nicht versuchen und in einer (Original-)xlocnum-Datei ist diese Methode (num_put::do_put) mit einem long enthalten.

    Vielleicht meldet sich alica2005 ja noch mal ..

    Gruß
    Werner



  • Hmmm...
    Müssen die standard-streams float unterstützen?
    Das Problem ist dass es keinen Overload für float gibt, mit double/long double ginge es ja.

    @Werner Salomon:
    er castet den int ja nach float, mit int würde es sicher gehen.



  • hustbaer schrieb:

    Hmmm...
    Müssen die standard-streams float unterstützen?
    Das Problem ist dass es keinen Overload für float gibt, mit double/long double ginge es ja.

    @Werner Salomon:
    er castet den int ja nach float, mit int würde es sicher gehen.

    Nein, es geht garade nicht mit int (laut der Problembeschreibung). Wenn er direkt int s in den Stream schiebt, gibts den Fehler. Es geht erst, wenn er castet.


Anmelden zum Antworten