error C2146 und error C4430
-
Hi,
ich habe wie viele in diesem Forum ein Problem.Ich schreibe meine Seminararbeit über das Thema der Spieleprogrammierung mit C++ und SFML. Dafür soll ich auch ein eigenes Spiel programmieren (ist eig. logisch).
Jetzt habe ich aber eine Fehlerausgabe bekommen die mich ziemlich verwirrt.
error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'Start' error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
der Fehler befindet sich laut Ausgabe in der Game.hpp.
Habe auch schon auf Google gesucht aber alle Beiträge hatten den Fehler dass man dem Typen string den Namespace std zuordnen musste. Bei mir liegt aber keiner vor daher konnte mir das nicht helfen.
hoffe ihr könnt mir weiterhelfen und mir sagen was falsch ist und ob ich vielleicht sogar ein bisschen dämlich war. Allg. Verbesserungstipps nehme ich auch gerne an allerdings muss ich das Programm möglichst simpel halten, damit meine Kurskammeraden den Quelltext nach einer "kurzen" Einführung auch verstehen.
hier der Rest Code:
main.cpp:
#include <Code\Core\include\Game.hpp> int main() { Game Game; while (Game.isRunning()) { Game.run(); } return 0; }
Game.hpp:
#ifndef GAME_HPP #define GAME_HPP #include <iostream> #include <SFML\Graphics.hpp> #include <Code\GUI\Startbildschirm\include\Startbildschirm.hpp> class Game { public: Game(); ~Game(); void run(); bool isRunning(); private: void update(); void handleEvents(); void render(); void calculateFrameTime(); bool mRun; float mFrameTime; sf::RenderWindow Obturator; sf::Event MainEvent; sf::Clock Clock; Startbildschirm Start; }; #endif
Game.cpp:
#include <Code\Core\include\Game.hpp> Game::Game() { Obturator.create(sf::VideoMode(1280,720),"The Obturator"); mFrameTime = 0; mRun = true; } Game::~Game() { } void Game::run() { update(); handleEvents(); render(); } bool Game::isRunning() { return mRun; } void Game::update() { Start.playMusic(); } void Game::handleEvents() { while (Obturator.pollEvent(MainEvent)) { switch (MainEvent.type) { case sf::Event::Closed: mRun = false; } } Start.handleEvents(Obturator); } void Game::render() { Obturator.clear(); Start.render(Obturator); Obturator.display(); } void Game::calculateFrameTime() { mFrameTime = Clock.getElapsedTime().asSeconds(); Clock.restart(); }
Startbildschirm.hpp:
#ifndef STARTBILDSCHIRM_HPP #define STARTBILDSCHIRM_HPP #include <iostream> #include <SFML\Graphics.hpp> #include <SFML\Audio.hpp> #include <Code\Core\include\Game.hpp> class Startbildschirm { public: Startbildschirm(); ~Startbildschirm(); void update(float frametime); void handleEvents(sf::RenderWindow& rw); void render(sf::RenderWindow& rw); void playMusic(); bool playMusicStart; sf::Font Font; sf::Text Titel; sf::Texture TBackground; sf::Sprite SBackgound; sf::Texture TPlay; sf::Sprite SPlay; sf::Texture TShop; sf::Sprite SShop; sf::Texture TExit; sf::Sprite SExit; sf::Music Music; private: }; #endif
Startbildschirm.cpp:
#include <Code\GUI\Startbildschirm\include\Startbildschirm.hpp> Startbildschirm::Startbildschirm() { TBackground.loadFromFile("Texturen\\GUI\\Startbildschirm\\Hintergrund\\Jungle2.png"); SBackgound.setTexture(TBackground); SBackgound.setScale(0.66666666666666f,0.66666666666666f); Font.loadFromFile("Schriftart\\Kingdom_Hearts_Font.ttf"); Titel.setCharacterSize(30); Titel.setOrigin((Titel.getGlobalBounds().left + Titel.getGlobalBounds().width)/2, (Titel.getGlobalBounds().top + Titel.getGlobalBounds().height)/2); Titel.setFont(Font); Titel.setPosition(640,150); Titel.setString("THE OBTURATOR"); TPlay.loadFromFile("Texturen\\GUI\\Startbildschirm\\Buttons\\buttons_spritesheet.png"); SPlay.setTexture(TPlay); SPlay.setTextureRect(sf::IntRect(0,140,445,130)); SPlay.setScale(0.5,0.5); SPlay.setOrigin(222.5f,65); SPlay.setPosition(640,280); TShop.loadFromFile("Texturen\\GUI\\Startbildschirm\\Buttons\\buttons_spritesheet.png"); SShop.setTexture(TShop); SShop.setTextureRect(sf::IntRect(0,270,445,150)); SShop.setScale(0.5,0.5); SShop.setOrigin(222.5f,75); SShop.setPosition(640,360); TExit.loadFromFile("Texturen\\GUI\\Startbildschirm\\Buttons\\buttons_spritesheet.png"); SExit.setTexture(TExit); SExit.setTextureRect(sf::IntRect(445,0,440,130)); SExit.setScale(0.5,0.5); SExit.setOrigin(220,65); SExit.setPosition(640,435); Music.openFromFile("Musik\\GUI\\Startbildschirm\\Drachenzaehmen_leicht_gemacht_Test_Drive.ogg"); Music.setVolume(10); Music.setLoop(true); playMusicStart = false; } Startbildschirm::~Startbildschirm() { } void Startbildschirm::update(float frametime) { } void Startbildschirm::handleEvents(sf::RenderWindow& rw) { if(sf::Mouse::getPosition(rw).x > SPlay.getGlobalBounds().left && sf::Mouse::getPosition(rw).x < (SPlay.getGlobalBounds().left + SPlay.getGlobalBounds().width) && sf::Mouse::getPosition(rw).y > SPlay.getGlobalBounds().top && sf::Mouse::getPosition(rw).y < (SPlay.getGlobalBounds().top + SPlay.getGlobalBounds().height)) { SPlay.setColor(sf::Color(205,205,205,255)); if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) SPlay.setColor(sf::Color(155,155,155,255)); } else SPlay.setColor(sf::Color(255,255,255,255)); if(sf::Mouse::getPosition(rw).x > SShop.getGlobalBounds().left && sf::Mouse::getPosition(rw).x < (SShop.getGlobalBounds().left + SShop.getGlobalBounds().width) && sf::Mouse::getPosition(rw).y > SShop.getGlobalBounds().top && sf::Mouse::getPosition(rw).y < (SShop.getGlobalBounds().top + SShop.getGlobalBounds().height)) { SShop.setColor(sf::Color(205,205,205,255)); if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) SShop.setColor(sf::Color(155,155,155,255)); } else SShop.setColor(sf::Color(255,255,255,255)); if(sf::Mouse::getPosition(rw).x > SExit.getGlobalBounds().left && sf::Mouse::getPosition(rw).x < (SExit.getGlobalBounds().left + SExit.getGlobalBounds().width) && sf::Mouse::getPosition(rw).y > SExit.getGlobalBounds().top && sf::Mouse::getPosition(rw).y < (SExit.getGlobalBounds().top + SExit.getGlobalBounds().height)) { SExit.setColor(sf::Color(205,205,205,255)); if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) { SExit.setColor(sf::Color(155,155,155,255)); } } else SExit.setColor(sf::Color(255,255,255,255)); } void Startbildschirm::render(sf::RenderWindow& rw) { rw.draw(SBackgound); rw.draw(Titel); rw.draw(SPlay); rw.draw(SShop); rw.draw(SExit); } void Startbildschirm::playMusic() { if (playMusicStart == false) { Music.play(); playMusicStart = true; } }
-
Das schöne an Compiler Fehlern ist, dass sie einem mitteilen wo sie auftreten.
-
Schlangenmensch schrieb:
Das schöne an Compiler Fehlern ist, dass sie einem mitteilen wo sie auftreten.
Die Ausgabe sagt dass der Fehler bei der Definition der Membervariable Start der Klasse Startbildschirm vorliegt allerdings hatte ich es auch schon oft genug das die Ausgabe nichts mit dem eigentlichen Fehler zu tun hatte
-
Game.hpp
inkludiertStartbildschirm.hpp
und umgekehrt. Das darf nicht sein. ("circular dependencies")
-
Furble Wurble schrieb:
Game.hpp
inkludiertStartbildschirm.hpp
und umgekehrt. Das darf nicht sein. ("circular dependencies")Okay dann war ich wirklich dämlich. Danke sehr. Du hast mir sehr viel Zeit erspart darauf hätte ich nicht geachtet was vielleicht doch ein bisschen schlecht ist