Visual Studio 丢失所有引用
Visual Studio lost all References
我在 Visual Studio 2017 年的 C++ Projekt 上工作了很长时间。
现在我尝试编译我的项目,它显示了超过 180 个构建错误。似乎他失去了对我的 classes 的所有引用。
基础class未定义/未找到方法等
Inlude部分本身没有报错,感觉他能找到文件。
他还在代码中突出显示了我的 classes,所以我认为他应该能够找到所有内容。
有人知道如何修复这个错误吗?
输出
1>------ Erstellen gestartet: Projekt: SDL Project Template1, Konfiguration: Debug Win32 ------
1>colliderWall.cpp
1>h:. engine\sdl project template1\sdl project template1\gamecamera.h(9): error C2504: "GameObject": Basisklasse undefiniert
1>h:. engine\sdl project template1\sdl project template1\gamecamera.h(12): error C2061: Syntaxfehler: Bezeichner "reffer"
1>h:. engine\sdl project template1\sdl project template1\gamecamera.h(12): error C2535: "gameCamera::gameCamera(void)": Memberfunktion bereits definiert oder deklariert
1>h:. engine\sdl project template1\sdl project template1\gamecamera.h(11): note: Siehe Deklaration von "gameCamera::gameCamera"
1>h:. engine\sdl project template1\sdl project template1\gamecamera.h(19): error C2061: Syntaxfehler: Bezeichner "GameObject"
1>h:. 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:. 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:. 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:. 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:. 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:. engine\sdl project template1\sdl project template1\gameobject.h(14): error C2061: Syntaxfehler: Bezeichner "reffer"
1>h:. engine\sdl project template1\sdl project template1\gameobject.h(14): error C2535: "GameObject::GameObject(void)": Memberfunktion bereits definiert oder deklariert
1>h:. engine\sdl project template1\sdl project template1\gameobject.h(13): note: Siehe Deklaration von "GameObject::GameObject"
1>h:. engine\sdl project template1\sdl project template1\gameobject.h(22): error C2143: Syntaxfehler: Es fehlt ";" vor "*"
1>h:. 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:. engine\sdl project template1\sdl project template1\gameobject.h(22): error C2238: Unerwartete(s) Token vor ";"
1>h:. 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;
};
这感觉就像您有循环包含依赖项。尝试将 #include "SpriteRenderer.h"
、#include "Transform.h"
和 #include "reffer.h"
移动到 gameCamera.cpp
中并为 reffer
添加前向声明。那么 gameCamera.h
中唯一包含的是 GameObject.h
,事情可能会起作用。
一般来说,最好将给定 header 中包含的 header 的数量保持在最低限度 - 如果您将它们包含在 .cpp
中需要,但尽可能坚持前向声明。它主要减少了编译时间(和 re-compile 雪崩),但它也可以帮助避免或简化像您这样的案例的诊断。
我在 Visual Studio 2017 年的 C++ Projekt 上工作了很长时间。
现在我尝试编译我的项目,它显示了超过 180 个构建错误。似乎他失去了对我的 classes 的所有引用。
基础class未定义/未找到方法等
Inlude部分本身没有报错,感觉他能找到文件。
有人知道如何修复这个错误吗?
输出
1>------ Erstellen gestartet: Projekt: SDL Project Template1, Konfiguration: Debug Win32 ------
1>colliderWall.cpp
1>h:. engine\sdl project template1\sdl project template1\gamecamera.h(9): error C2504: "GameObject": Basisklasse undefiniert
1>h:. engine\sdl project template1\sdl project template1\gamecamera.h(12): error C2061: Syntaxfehler: Bezeichner "reffer"
1>h:. engine\sdl project template1\sdl project template1\gamecamera.h(12): error C2535: "gameCamera::gameCamera(void)": Memberfunktion bereits definiert oder deklariert
1>h:. engine\sdl project template1\sdl project template1\gamecamera.h(11): note: Siehe Deklaration von "gameCamera::gameCamera"
1>h:. engine\sdl project template1\sdl project template1\gamecamera.h(19): error C2061: Syntaxfehler: Bezeichner "GameObject"
1>h:. 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:. 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:. 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:. 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:. 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:. engine\sdl project template1\sdl project template1\gameobject.h(14): error C2061: Syntaxfehler: Bezeichner "reffer"
1>h:. engine\sdl project template1\sdl project template1\gameobject.h(14): error C2535: "GameObject::GameObject(void)": Memberfunktion bereits definiert oder deklariert
1>h:. engine\sdl project template1\sdl project template1\gameobject.h(13): note: Siehe Deklaration von "GameObject::GameObject"
1>h:. engine\sdl project template1\sdl project template1\gameobject.h(22): error C2143: Syntaxfehler: Es fehlt ";" vor "*"
1>h:. 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:. engine\sdl project template1\sdl project template1\gameobject.h(22): error C2238: Unerwartete(s) Token vor ";"
1>h:. 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;
};
这感觉就像您有循环包含依赖项。尝试将 #include "SpriteRenderer.h"
、#include "Transform.h"
和 #include "reffer.h"
移动到 gameCamera.cpp
中并为 reffer
添加前向声明。那么 gameCamera.h
中唯一包含的是 GameObject.h
,事情可能会起作用。
一般来说,最好将给定 header 中包含的 header 的数量保持在最低限度 - 如果您将它们包含在 .cpp
中需要,但尽可能坚持前向声明。它主要减少了编译时间(和 re-compile 雪崩),但它也可以帮助避免或简化像您这样的案例的诊断。