uint8_t und cout


  • Administrator

    Hast du auch das Objectfile, welches aus astterm.cpp erzeugt wird, bei der Kompilierung von main.cpp dazugefügt?

    Im übrigen sind die folgenden 2 Header keine Standard C++ Header:
    `#include <stdlib.h>

    #include <stdint.h>`

    Das sind C Header. Für <stdlib.h> gibt es in C++ den <cstdlib> , wo dann auch alle Funktionen in Namensraum std sind. Für <stdint.h> gibt es in C++ keinen entsprechenden Header, da dieser erst in C99 dazukam. Man sollte im allgemeinen eher auf C++ Funktionen in C++ zurückgreifen. Die C Funktionen wurden nunmal nicht für C++ geschaffen.

    Grüssli



  • Hi,

    Dravere schrieb:

    Hast du auch das Objectfile, welches aus astterm.cpp erzeugt wird, bei der Kompilierung von main.cpp dazugefügt?

    Gute Frage. Hab in NetBeans einfach Compile gedrückt. Mh. Ich gehe eingentlich mal davon aus, dass dies das Makefile berücksichtigt. Wenn ich es über Kommandozeile compiliere, ergibt sich:

    gcc ast/ASTTerm.cpp main.cpp -o out.a
    /tmp/cc2yuDFt.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, ast::ASTTerm const&)':
    ASTTerm.cpp:(.text+0x42): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
    /tmp/cc2yuDFt.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    /tmp/ccWDxdeD.o: In function `__static_initialization_and_destruction_0(int, int)':
    main.cpp:(.text+0x1d): undefined reference to `std::ios_base::Init::Init()'
    main.cpp:(.text+0x22): undefined reference to `std::ios_base::Init::~Init()'
    /tmp/ccWDxdeD.o: In function `main':
    main.cpp:(.text+0x8a): undefined reference to `std::cout'
    main.cpp:(.text+0x8f): undefined reference to `ast::operator<<(std::basic_ostream<char, std::char_traits<char> >&, ast::ASTTerm const&)'
    main.cpp:(.text+0x97): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
    main.cpp:(.text+0x9f): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
    /tmp/ccWDxdeD.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    collect2: ld gab 1 als Ende-Status zurück
    

    Was doch in etwa das gleiche ist. Oder?

    Bezüglich der Header danke für den Tipp. Also stdint.h benötige ich nur für uint8_t, unint16_t, ... Typen innerhalb meines Projektes (Vorgabe 😞 ). DAs mit stdlib werde ich gleich ändern.

    Uwe



  • Hatte ich vorhin gar nicht gesehen: Du musst die Definition von std::ostream& operator<<( std::ostream& s, const ASTTerm& t) auch innerhalb namespace ast { .. } einpacken 🙂



  • Hi badestrand,

    ist es doch? Siehe mein Minibeispiel. Oder irre ich da?

    Uwe


  • Administrator

    uwerothfeld schrieb:

    ist es doch? Siehe mein Minibeispiel. Oder irre ich da?

    Nein! Badestrand hat recht, habe es auch vollkommen übersehen. Du machst in der *.cpp ein using namespace ast; , was aber nicht das gleiche ist, wie wenn du alles in den Rumpf von namespace ast setzen würdest.

    Am besten schreibst du die *.cpp auf die folgende Art und Weise:

    /*
     * File:   astterm.cpp
     */
    #include "ASTTerm.h"
    
    namespace ast {
    
    ASTTerm::ASTTerm(int vn) {
        this->i = vn;
    }//End ASTTerm
    
    int ASTTerm::getI() const {
        return this->i;
    }//End getI
    
    std::ostream& operator<<( std::ostream& s, const ASTTerm& t) {
    
        //return s << t.i; //geht nicht trotz friend
        return s << t.getI(); //geht
    
    }//End operator<<
    
    } // ast
    

    Grüssli



  • Hi Jungs,

    Es geht!!!!! 👍 Ist ja der WAHNSINN!!! Geil. Ich bin begeistert. Vielen, vielen, vielen Dank für Eure Hilfe. Man, da wäre ich nie drauf gekommen. Super. Es geht wie ne eins. Toll. Vielen Dank für Eure Hilfe.

    Uwe, der vor Freude im Viereck springt.

    Thread *close* sozusagen!!! 🙂



  • Da kann sich einer ja noch richtig ab Kleinigkeiten freuen. 🙂


Anmelden zum Antworten