Search code examples
c++visual-studiovisual-studio-2017sdlproject

Visual Studio lost all References


I worked for a long time on my C++ Projekt in Visual Studio 2017.

Now i tried to compile my project and it shows me over 180 build errors. It seems like he lost all references to my classes.

Base class are undefined / methods not found etc.

The Inlude part itself shows no error, so it feels like he is able to finde the files.

enter image description here He also highlighted my classes in the code so i think he should be able to find everything.

Dose someone know how to fix this bug?

OUTPUT

1>------ Erstellen gestartet: Projekt: SDL Project Template1, Konfiguration: Debug Win32 ------
1>colliderWall.cpp
1>h:\15. engine\sdl project template1\sdl project template1\gamecamera.h(9): error C2504: "GameObject": Basisklasse undefiniert
1>h:\15. engine\sdl project template1\sdl project template1\gamecamera.h(12): error C2061: Syntaxfehler: Bezeichner "reffer"
1>h:\15. engine\sdl project template1\sdl project template1\gamecamera.h(12): error C2535: "gameCamera::gameCamera(void)": Memberfunktion bereits definiert oder deklariert
1>h:\15. engine\sdl project template1\sdl project template1\gamecamera.h(11): note: Siehe Deklaration von "gameCamera::gameCamera"
1>h:\15. engine\sdl project template1\sdl project template1\gamecamera.h(19): error C2061: Syntaxfehler: Bezeichner "GameObject"
1>h:\15. engine\sdl project template1\sdl project template1\gamecamera.h(15): error C3668: "gameCamera::logik": Die Methode mit dem Überschreibungsspezifizierer "override" hat keine Basisklassenmethoden überschrieben.
1>h:\15. engine\sdl project template1\sdl project template1\gamecamera.h(16): error C3668: "gameCamera::draw": Die Methode mit dem Überschreibungsspezifizierer "override" hat keine Basisklassenmethoden überschrieben.
1>h:\15. engine\sdl project template1\sdl project template1\gamecamera.h(17): error C3668: "gameCamera::save": Die Methode mit dem Überschreibungsspezifizierer "override" hat keine Basisklassenmethoden überschrieben.
1>h:\15. engine\sdl project template1\sdl project template1\gamecamera.h(18): error C3668: "gameCamera::load": Die Methode mit dem Überschreibungsspezifizierer "override" hat keine Basisklassenmethoden überschrieben.
1>h:\15. engine\sdl project template1\sdl project template1\gamecamera.h(19): error C3668: "gameCamera::onCollide": Die Methode mit dem Überschreibungsspezifizierer "override" hat keine Basisklassenmethoden überschrieben.
1>h:\15. engine\sdl project template1\sdl project template1\gameobject.h(14): error C2061: Syntaxfehler: Bezeichner "reffer"
1>h:\15. engine\sdl project template1\sdl project template1\gameobject.h(14): error C2535: "GameObject::GameObject(void)": Memberfunktion bereits definiert oder deklariert
1>h:\15. engine\sdl project template1\sdl project template1\gameobject.h(13): note: Siehe Deklaration von "GameObject::GameObject"
1>h:\15. engine\sdl project template1\sdl project template1\gameobject.h(22): error C2143: Syntaxfehler: Es fehlt ";" vor "*"
1>h:\15. engine\sdl project template1\sdl project template1\gameobject.h(22): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>h:\15. engine\sdl project template1\sdl project template1\gameobject.h(22): error C2238: Unerwartete(s) Token vor ";"
1>h:\15. engine\sdl project template1\sdl project template1\gameobject.h(23): error C2143: Syntaxfehler: Es fehlt ";" vor "*

gameCamera.h

#pragma once
#include "Transform.h"
#include "SpriteRenderer.h"
#include "reffer.h"
#include "GameObject.h"

class gameCamera :
    public GameObject
{
public:
    gameCamera();
    gameCamera(reffer* _refObj);
    ~gameCamera();

    void logik()    override;
    void draw()     override;
    void save()     override;
    void load()     override;
    void onCollide(GameObject * coll) override;
};

Solution

  • This feels like you have circular include dependencies. Try moving #include "SpriteRenderer.h", #include "Transform.h" and #include "reffer.h" into gameCamera.cpp and add a forward declaration for reffer. Then the only include in gameCamera.h is GameObject.h and things will probably work.

    In general, it is good practice to keep the number of headers you include in a given header to the bare minimum - include them in the .cpp instead if you need to, but otherwise stick with forward declarations as much as possible. It primarily reduces compile times (and re-compile avalanches) but it can also help in avoiding or easing diagnosis of cases like yours.