C++ 错误是“不”;“摄像机未定义”;,但我确实给它下了定义

C++ 错误是“不”;“摄像机未定义”;,但我确实给它下了定义,c++,opengl,camera,C++,Opengl,Camera,我的相机功能不工作。错误表明myCamera未定义,但我定义了它 根据错误消息,Camera是未知的覆盖说明符 在这里,我已经包括了相机标题,所以这应该是好的 等级h: #pragma once #include "Vectors.h" #include "level.h" #include "glut.h" #include <gl/GL.h> #include <gl/GLU.h> #include "controls.h" #include <stdi

我的相机功能不工作。错误表明
myCamera
未定义,但我定义了它

根据错误消息,
Camera
是未知的覆盖说明符

在这里,我已经包括了相机标题,所以这应该是好的

等级h:


#pragma once
#include "Vectors.h"
#include "level.h"



#include "glut.h"
#include <gl/GL.h>
#include <gl/GLU.h>
#include "controls.h"
#include <stdio.h>
#include "SOIL.h"
#include <vector>
#include "camera.h"
class Scene{

public:
    level(Input *in);

    void renderer();

    void handleInput(float dt);

    void update(float dt);

    void resize(int w, int h);

protected:

    void displayText(float x, float y, float r, float g, float b, char* string);

    void renderTextOutput();
    void calculateFPS();



    Input* input;


    int width, height;
    float fov, nearPlane, farPlane;


    int frame = 0, time, timebase = 0;
    camera myCamera;
};



这是相机课;但是没有错误消息,所以如果这里有什么错误,我不知道是什么。

您有一个循环包含依赖项
scene.h
包括
camera.h
camera.h
包括
scene.h

因此,当您尝试编译
camera.cpp
时,预处理器首先包括
camera.h
。在那里,它看到了
scene.h的include。在
scene.h
中,它再次看到
camera.h
的include,但
#pragma一次将阻止它再次被包含。请注意,此时,
camera.h
仅在
#包括“scene.h”
之前读取。因此,当编译器到达
camera myCamera
时,类型
camera
未定义,因为相应的头文件尚未完全读取

要解决此问题,请删除
camera.h
中包含的
scene.h
。反正你在那里也不用。如果您需要从那里输入类型,请考虑一个.< /p> 此外,还应:

#pragma once
...
#ifndef _SCENE_H
#define _SCENE_H

没有道理。
#pragma once
完成与include guard
_SCENE_H
相同的任务。使用其中一个,而不是两者。

你需要给我们一个更大的部分<>代码>场景。CPP<代码> >代码>场景。h < /Case>场景。h这里我包含了相机头,所以这应该是好的,如果这个头包含在两个或多个C++编译单元中,那就不好了。您有一个全局变量,当链接器获取模块时,该变量将被多次声明,从而导致链接器错误。请包含一个。您发布的代码应该足以重现错误,但不会更多(如果三角计算与问题无关,则不必发布三角计算)。似乎
scene.cpp
没有
#include“scene.h”
。很难确定,因为
scene.cpp
是一个摘录,而不是一个。@PaulMcKenzie我在camera.cpp中包含camera.h的唯一一次
#pragma once
...
#ifndef _SCENE_H
#define _SCENE_H