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++ 的错误。但是#includes 的每个文件损坏的标头,会导致大量错误。因此,找到此类问题有点困难。恕我直言,最好记住“我最后更改了什么?”。) 第一次遇到这个问题时会感到不安。突然间,你从控制到什么都不懂。 @Scheff 好点。但即使我的预感在这里是错误的,它也可能有助于隔离问题。 循环包含依赖是正确的。谢谢!

以上是关于Visual Studio 丢失了所有引用 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2017 - 下载远程引用的 JavaScript 选项丢失

Visual Studio 2010 并排运行时丢失用户设置

在使用 Visual Studio 2010 部署/发布期间,一些 dll 丢失

Visual Studio 2015 可执行文件丢失

Visual Studio 项目和解决方案 路径修改(解决部分模板丢失的问题)

Visual Studio 数据库项目 - 部署到没有所有数据库引用的环境