C++ Error



  • Wo soll denn using raus ?
    Unser Prof erklärt uns nichts .
    Und beim lernen bin ich auf mich selber angewiesen .

    Drehe durch bei den vielen Codes ?

    Welches rekursive ?



  • @Programmer33 using namespace ... niemals (niemals), also gar niemals vor einem include!



  • @Programmer33 egal ob Studium oder Ausbildung: Breymann der c++-Programmierer. Aktuell für c++17. Hoffe ich bekomme irgendwann provision 😉

    Da kannst dich bei sowas nicht auf das Unterrichtsmaterial verlassen. Man braucht extra was genaues zum nachschlagen...



  • @Programmer33 sagte in C++ Error:

    Welches rekursive ?

    #include "CScreen.h"  // hier in dieser Datei "CScreen.h" soll 
                          // also die "CScreen.h" eingefügt werden??
    
    /**
     * Dies Klasse repr‰sentiert einen Bereich von 80x24 "Punkten",
     * die als ein beliebiges Zeichen dargestellt werden kˆnnen.
     */
    class CScreen
    {
    private:
    

    Diese. Vorrausgesetzt dies ist ein Teil der Datei „CScreen.h“ was ich nur raten kann...

    hth

    Edit: include-guard hast du ja. Trotzdem unsinnig die Zeile...



  • oh man weiss auch nicht wie ich das gemacht habe .
    Aus versehen wohl.
    Aber auch nach beseitigen dieses Fehler : Immer noch error

    Woran kann es liegen?



  • @Programmer33 ups, ich sehe gerade der Fehler war ja in der CRect...



  • habe auch die using namespace nach dem Include eingebaut ?
    Iostream auch nach include ?



  • ja in der Rectangle wird hier gemeckert ?
    Es erkennt das CScreen nicht ?

    void draw(CScreen& screen) const;


  • @Programmer33 Nehme erstmal in allen *.h das using komplett raus. Wenn es irgendwo gebraucht wird mach jeweils ein std:: vor...

    Dann in allen *.cpp das using namespace unter dem letzten include. Oder nimm es auch raus und mach auch immer ein std:: vor (std::endl, std::cout etc)



  • und setze die Fehlermeldungen auch in code-tags...



  • das hat die fehler nur verdoppelt lol.

    Mache sie jetzt wieder rein.



  • @Programmer33 Nein! Nochmal den Code mit Fehlermeldung in code-tags. Woher sollen wir wissen was gerade bei dir aktuell ist...



  • 
    Description	Resource	Path	Location	Type
    make: *** [CScreen.o] Error 1	WS14		 	C/C++ Problem
    unknown type name 'CScreen'	CRectangle.h	/WS14	line 104	C/C++ Problem
    

    Diese Zeile wird angezeigt :void draw(CScreen& screen) const;

    Die ist auch nicht implementiert ?
    Vielleicht liegt es daran lol



  • #include "CRectangle.h"
    

    gehört nicht in CScreen.h. Wird nicht gebraucht.



  • @Programmer33 Bei mir funktioniert es nach den entsprechenden Änderungen. Alle usings in .h raus, using in .cpp unter den letzten include. vor ostream ein std:: und die CRectangle.h raus aus CScreen.h. Nur ein Warning wg. ungenutzeten Parameter. Die CPoint.cpp hab ich jetzt nicht probiert.



  • #include "CScreen.h"
    #include "CRectangle.h"
    #include "CPoint.h"
    
    
    int main() {
            CScreen scr;
            CRectangle rec;
            CPoint p;
    
            return 0;
    }
    
    dirk@schleppi:~/develop/cpp/c-plusplus.net/tests> g++ -Wall -W --std=c++17 CScreen.cpp CRectangle.cpp CPoint.cpp  main.cpp 
    CRectangle.cpp: In Elementfunktion »void CRectangle::draw(CScreen&) const«:
    CRectangle.cpp:71:32: Warnung: unverwendeter Parameter »screen« [-Wunused-parameter]
     void CRectangle::draw(CScreen& screen) const
                           ~~~~~~~~~^~~~~~
    dirk@schleppi:~/develop/cpp/c-plusplus.net/tests> 
    


  • Meinst du dass ich nur bei den Headern das using raus holen soll?
    Oder bei allen ?
    Ich habe gedacht vielleicht implementiere ich einfach die Methode um Fehler weg zu bekommen😀
    /**
    * Zeichnet das Rechteck in das ¸bergebene Bildschirmobjekt. Das heisst,
    * es werden mit CScreen::setPoint die Werte aller "Punkte", die im
    * Bereich des Rechtecks liegen, auf das F¸llzeichen des Rechtecks gesetzt.
    */
    void draw(CScreen& screen) const;

    meine Idee :

    
    void CRectangle::draw(CScreen& screen) const
    {
    	CScreen::setPoint(CPoint point,'#') = screen;
    	
    	
    }
    

    Ist die Idee wenigstens teilweise richtig ?



  • @Programmer33 ja, usings aus allen headern raus. und in den cpps unter dem letzten #include....*)

    Ich habe nur ein Warning. Es ging erstmal nur darum das es übersetzt.... Dann weiter schauen.

    Dein Code: ?!? Ähhmm... CScreen::setPoint() gibt nix zurück. Keine Referenz, nix. Da gibt's nix zum zuweisen. Ich empfehle nochmal den Breymann. Das ist kein Hobby, das willst Du in Zukunft als Beruf machen...

    Edit: Damit meine ich das using namespace... nach unten verschieben, unter dem letzten #include. in allen cpps. Und auf jden Fall aus allen *.h raus.



  • @Programmer33 Und das Warning ist in Ordnung wenn die Funktion noch leer ist. Überhaupt kein Problem.

    Mach die Änderungen wie oben beschrieben.



  • Sobald ich das using namespace aus den Headern raus nehme:

    Description	Resource	Path	Location	Type
    'CPoint' does not refer to a value	CRectangle.cpp	/WS14	line 80	C/C++ Problem
    call to non-static member function without an object argument	CRectangle.cpp	/WS14	line 80	C/C++ Problem
    make: *** [CRectangle.o] Error 1	WS14		 	C/C++ Problem
    Return has value, in function returning void	CRectangle.cpp	/WS14	line 80	Code Analysis Problem
    unknown type name 'ostream'; did you mean 'std::ostream'?	CRectangle.h	/WS14	line 110	C/C++ Problem
    unknown type name 'ostream'; did you mean 'std::ostream'?	CRectangle.h	/WS14	line 112	C/C++ Problem
    'std::ostream' declared here	WS14		line 147, external location: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iosfwd	C/C++ Problem
    declared here	CPoint.h	/WS14	line 18	C/C++ Problem
    
    

    Das mit dem ostream bekomme ich ja mit std:: weg aber die anderen ?

    Komisch


Anmelden zum Antworten