C++ Novize sucht Hilfe zu nicht deklarierten Bezeichnern



  • Aloha erstmal 😃
    Vor kurzem habe ich begonnen mich mit Objektorientierten Sprachen auseinander zu setzen und so begann ich mit C++, da das hochgesteckte Ziel ein Spiel in Eigenregie werden soll, in Kombination mit SDL2.
    Die Probleme gingen los als ich das gemütliche Programmierumfeld main(void) verlassen hab und begann mit Klassen zu arbeiten. Mein Code wird einfach nicht kompiliert, ich vermute aufgrund eines fehlenden ';' konnte aber auf Biegen und Brechen keins finden. Hier ein Auszug des Debuggers:

    1>  start.cpp
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(12): error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(12): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(12): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    ...
    
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(15): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(15): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(16): error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(16): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(16): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(17): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'grassrect'
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(17): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(17): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(18): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'manrect'
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(18): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.h(18): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(8): error C2065: 'window': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(9): error C2065: 'window': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(11): error C2065: 'window': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(17): error C2065: 'render': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(39): error C2065: 'manrect': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(39): error C2228: Links von ".x" muss sich eine Klasse/Struktur/Union befinden.
    1>          Typ ist ''unknown-type''
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(40): error C2065: 'manrect': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(40): error C2228: Links von ".y" muss sich eine Klasse/Struktur/Union befinden.
    1>          Typ ist ''unknown-type''
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(41): error C2065: 'manrect': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(41): error C2228: Links von ".h" muss sich eine Klasse/Struktur/Union befinden.
    1>          Typ ist ''unknown-type''
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(42): error C2065: 'manrect': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(42): error C2228: Links von ".w" muss sich eine Klasse/Struktur/Union befinden.
    1>          Typ ist ''unknown-type''
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(49): error C2065: 'grass_image': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(50): error C2065: 'man_image': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(51): error C2065: 'window': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(52): error C2065: 'render': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(53): error C2065: 'mainEvent': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(53): error C2541: 'delete': Objekte, die keine Zeiger sind, können nicht gelöscht werden
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(59): error C2065: 'mainEvent': nichtdeklarierter Bezeichner
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(59): error C2227: Links von "->type" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1>          Typ ist ''unknown-type''
    1>c:\users\ziiifliegen\documents\visual studio 2010\projects\öööhm\öööhm\main.cpp(59): fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
    1>  Code wird generiert...
    ========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========
    

    Also so wie es für mich aussieht scheinen die Variablen in Main.h nich deklariert zu werden. Hier die Main.h:

    #pragma once
    
    class CMain
    {
    public:
    	CMain(void);
    	~CMain(void);
    	void GameLoop();
    
    private:
    	bool run;
    	SDL_Window* window;
    	SDL_Renderer* render;
    	SDL_Event* mainEvent;
    	SDL_Texture* grass_image;
    	SDL_Texture* man_image;
    	SDL_Rect grassrect;
    	SDL_Rect manrect;
    };
    

    Die Main.cpp:

    #include "Main.h"
    #include "stanni.h"
    
    CMain::CMain(void)
    {
    	run = true;
    	window = NULL;
    	window = SDL_CreateWindow("SPIIIEL!", 100, 100, 800, 600, SDL_WINDOW_SHOWN);
    	if (window == NULL)
    	{
    		std::cout << "Window couldnt load" << std::endl;
    		run = false;
    	}
    
    	render = NULL;
    	render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    	mainEvent = new SDL_Event();
    
    	grass_image = NULL;
    	grass_image = IMG_LoadTexture(render, "gras.bmp");
    
    	man_image = NULL;
    	man_image = IMG_LoadTexture(render, "man.png");
    	if (man_image == NULL)
    	{
    		std::cout << "manpic couldnt load" << std::endl;
    		run = false;
    	}
    
    	grassrect.x = 0;
    	grassrect.y = 0;
    	grassrect.h = 600;
    	grassrect.w = 800;
    
    	manrect.x = 350;
    	manrect.y = 250;
    	manrect.h = 50;
    	manrect.w = 50;
    }
    
    CMain::~CMain(void)
    {
    	SDL_DestroyTexture (grass_image);
    	SDL_DestroyTexture (man_image);
    	SDL_DestroyWindow (window);
    	SDL_DestroyRenderer (render);
    	delete mainEvent;
    }
    
    void CMain::GameLoop (void)
    {
    	while(run && mainEvent->type != SDL_QUIT)
    	{
    		SDL_PollEvent(mainEvent);
    		SDL_RenderClear (render);
    
    		SDL_RenderCopy(render, grass_image, NULL, &grassrect);
    		SDL_RenderCopy(render, man_image, NULL, &manrect);
    
    		SDL_RenderPresent (render);
    	}
    }
    

    Hier die inkludierte stanni.h:

    #pragma once
    
    #include <SDL.h>
    #include <SDL_mixer.h>
    #include <SDL_image.h>
    #include <iostream>
    
    #ifdef _WIN32
    #undef main
    #endif
    

    Und zu guter letzt die start.cpp:

    #include "stanni.h"
    #include "Main.h"
    
    int main(int argc, char *argv[])
    {
    	CMain cmain;
    	cmain.GameLoop ();
    
    	return 0;
    }
    

    Soo, ich hoffe es war einigermaßen prägnant und verständlich und schon mal vielen Dank! 🙂

    Schöne Grüße
    SiiFliegen



  • Du mußt die "stanni.h" in der main.h einbinden. In den anderen Dateien kannst du dann die "stanni.h" weglassen (da diese dann automatisch mit der "main.h" eingebunden wird).

    PS: Hier ist das falsche Unterforum (C++/CLI -> C++)
    PPS: Du solltest dir einen besseren Projektnamen (als "öööhm") ausdenken...



  • Und einmal mehr: Hier ist das C++/CLI Unterforum, da geht es NICHT um (ISO) C++, es sind verschiedene Sprachen.

    Konkret zu deinem Code:
    Vermutlich fehlen die Includes für die SDL Typen - so ist dann in main.h in CMain der erste SDL Type (SDL_Window) unbekannt.

    Allgemeiner Hinweis: Versuche so genau wie möglich zu schreiben. Du schreibst von Main.h, der Compiler Output benennt aber main.h - das passt nicht zusammen, auch wenn ich hier einfach mal annehme, dass das File tatsächlich main.h heisst bleibt eine Unsicherheit bestehen.



  • Super, vielen Dank TH69 für die schnelle Hilfe, die andern header nur in der Main.h zu inkludiern hat geholfen. 🙂

    Auch an theta ein Danke für den Hinweis, komischerweise heißt mein Headder wirklich Main.h und der compileroutput redet von main.h.
    Nichts desto trotz bin ich nun erstmal wunschlos glücklich 😃

    Sorry wegen des falschen Forums, kommt nich wieder vor und auch die Projektnamen werden in Zukunft kreativer 😉

    Dankbare Grüße
    Siifliegen



  • Wenn du C++ programmieren willst, dann schau dir vielleicht SFML an.


Anmelden zum Antworten