dev c++ und fehlermeldung



  • n'Abend zusammen

    habe gestern den dev c++ compiler gezogen um ihn mal auszuprobieren.
    nun bekomme ich einige fehlermeldungen(warnungen) zu einem programm, das mit
    dem visual c++ ohne probleme übersetzt wurde.
    weis eigentlich nicht so genau was die meldungen bedeuten?

    [Warning] no newline at end of file ?

    und bei diesem code

    class print
    {
    private:
    	std::ostream out;
    public:
    
    	print(std::ostream& o): out(o){} //<- fehler bezieht sich auf diese
                                              // zeile     
    
                 templatete<typename Key, typename Value>
    		void operator()(const std::pair<Key,Value>& r)
        { 
    		out<< r.first << ' ' << r.second;
        }         
    };
    

    erhalte ich diese meldungen

    /Dev-Cpp/include/c++/bits/ios_base.h E:\Eigene Dateien\Arbeitszeit\C
    In copy constructor

    421 C:\Dev-Cpp\include\c++\bits\ios_base.h
    `std::ios_base::ios_base(const

    11 E:\Eigene Dateien\Arbeitszeit\map_functor.h
    within this context

    könnt ihr mir helfen?



  • hallo elwida,

    die Fehlermeldungen sehen nicht vollstaendig aus:
    "within this context" bezieht sich auf die Stelle in Deinem Code, an dem mit "std::ios_base::ios_base(const..." was nicht stimmt (click oder Doppelclick fuehrt Dich an die Stelle)
    Schau Dir die Meldungen mal im "Kompiler Log" (Karteireiter) an, da steht aller Vorraussicht nach mehr drin.

    solong SF



  • bei mir werden auch immer nur sehr unvollständige compilerfehler ausgedruckt und der compilerlog ist doch recht unübersichtlich. hoffentlich fixen die das ma und bringen ma endlich ne neue stable raus, die ganzen betas gehn einem langsam aufen sack.



  • /edit: alles weg 🙂



  • hallo
    sorry das ich mich so spät melde
    hier die komplette fehlermeldeung:

    Building Makefile: "D:\Eigene Dateien\EigeneC++\Arbeitszeit\Makefile.win"
    Führt make clean aus
    rm -f arbeitszeitmain.o datum.o io_arbeitsstunden.o io_datum.o Arbeitszeit.exe

    g++.exe -c arbeitszeitmain.cpp -o arbeitszeitmain.o -I"C:/Dev-Cpp/include/c++" -I"C:/Dev-Cpp/include/c++/mingw32" -I"C:/Dev-Cpp/include/c++/backward" -I"C:/Dev-Cpp/include" -D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_CONSOLE -D_MBCS

    In file included from arbeitszeitmain.cpp:7:
    C:/Dev-Cpp/include/c++/bits/ios_base.h: In copy constructor
    std::basic\_ios<char, std::char\_traits<char> >::basic_ios(const std::basic\_ios<char, std::char\_traits<char> >&)': C:/Dev-Cpp/include/c++/bits/ios\_base.h:421:std::ios_base::ios_base(const
    std::ios_base&)' is private
    map_functor.h:11: within this context

    make.exe: *** [arbeitszeitmain.o] Error 1

    Ausführung beendet

    übrigens der grund für diese Warnung ([Warning] no newline at end of file ? )
    habe ich selbst herausgefunden.
    und zwar hatte ich in einer headerdatei zwischen dem }; und einem #endif einige leerzeilen eingfügt.
    damit war der compiler warscheinlich nicht so recht einverstanden. 😕

    gruß elwida



  • hallo

    also, das besagt, dass das Argument der Printanweisung,

    print(std::ostream& o): out(o){}
    

    also die Referenz auf einen ostream einen Kopierkonstruktor braucht,
    der aus der Klasse ios_base (C:/Dev-Cpp/include/c++/bits/ios_base.h:421)

    //50.  Copy constructor and assignment operator of ios_base
      private:
        ios_base(const ios_base&);
    

    aber eben privat ist.
    Falls Du von ios_base eine erbende Klasse hast, must Dir dort den Kopierkonstruktor
    anlegen.

    Andere Ueberlegung: musst Du unbedingt eine Referenz uebergeben, oder tuts dort auch
    das Original (weiss nicht was out(std::ostream) macht oder braucht)?

    Hoff's hilft
    SF



  • hallo Segmentation Faulter

    die class print dient dazu die opjekte in einer multimap auszugeben.

    for_each(mymap.begin(),mymap.end(),print(cout));
    

    um die multimap aber nicht nur auf dem bilschirm auszugeben sondern
    in eine datei zu leiten, bekommt print einen filestream mitgegeben.
    z.B. so:

    ofstream out;
    for_each(mymap.begin(),mymap.end(),print(out));
    

    habe die sache jetzt mit zeigern gelöst.

    gruß elwida


Anmelden zum Antworten