Visual Studio 丢失了所有引用 [关闭]
Posted
技术标签:
【中文标题】Visual Studio 丢失了所有引用 [关闭]【英文标题】:Visual Studio lost all References [closed] 【发布时间】:2018-08-23 07:41:25 【问题描述】:我在 Visual Studio 2017 中的 C++ Projekt 上工作了很长时间。
现在我尝试编译我的项目,它显示了超过 180 个构建错误。似乎他失去了对我课程的所有引用。
基类未定义/未找到方法等
Inlude部分本身没有错误,所以感觉他能够找到文件。
他还在代码中突出显示了我的类,所以我认为他应该能够找到所有内容。
有人知道如何修复这个错误吗?
输出
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;
;
【问题讨论】:
未解决的引用是由于链接错误。这可能有多种原因。大多数情况下,这些是损坏的依赖项。例如。项目的依赖关系损坏 -> 缺少库。有时,配置(平台、调试/发布)会意外混合。手动配置的链接库(或路径)丢失。有时,它甚至是由源代码引起的。例如。如果函数的签名在标头和源代码中有所不同(甚至略有不同),这不会产生编译器错误,而是产生未解析的引用。 (实现与原型无关,不是编译器错误。这样的错误很难找到。) @MThiele 显示第一个错误非常重要。您的屏幕截图没有这样做。 请查看底部的“Ausgabe”选项卡,并将显示在那里的前几条错误消息添加到您的问题中。 请将错误消息(和代码)以文本形式而不是图像形式发布。见meta.***.com/questions/303812/… @Swift-FridayPie 我希望任何编译器(甚至 MSVC)至少在“递归用尽”时通知您。事实上,我的 VS2015 智能感知已经在递归包含中咆哮,编译器在到达任何地方之前都会喊fatal error C1014: too many include files: depth = 1024
。我相信你老的编译器可能在这方面失败了,但 VS2017 不应该是其中之一。
【参考方案1】:
这感觉就像你有循环包含依赖项。尝试将#include "SpriteRenderer.h"
、#include "Transform.h"
和#include "reffer.h"
移动到gameCamera.cpp
并为reffer
添加前向声明。那么gameCamera.h
中唯一包含的就是GameObject.h
,这可能会奏效。
一般来说,最好将给定标头中包含的标头数量保持在最低限度 - 如果需要,请将它们包含在 .cpp
中,否则尽可能坚持前向声明.它主要减少了编译时间(和重新编译雪崩),但它也有助于避免或减轻像您这样的案例的诊断。
【讨论】:
有时,其他简单的错误可能会导致类似的错误雪崩。当我忘记关闭标头中的命名空间时,我意识到了可怕的事情......(不幸的是,编译器根本没有提到这个错误。严格来说,这不是关于 C++ 的错误。但是#include
s 的每个文件损坏的标头,会导致大量错误。因此,找到此类问题有点困难。恕我直言,最好记住“我最后更改了什么?”。)
第一次遇到这个问题时会感到不安。突然间,你从控制到什么都不懂。
@Scheff 好点。但即使我的预感在这里是错误的,它也可能有助于隔离问题。
循环包含依赖是正确的。谢谢!以上是关于Visual Studio 丢失了所有引用 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2017 - 下载远程引用的 JavaScript 选项丢失
Visual Studio 2010 并排运行时丢失用户设置
在使用 Visual Studio 2010 部署/发布期间,一些 dll 丢失