错误说“相机未定义”,但我确实定义了它

Posted

技术标签:

【中文标题】错误说“相机未定义”,但我确实定义了它【英文标题】:Error says "camera is undefined", but I did define it 【发布时间】:2019-12-09 13:46:20 【问题描述】:

我的相机功能不工作。错误提示 myCamera 未定义,但我确实定义了它。

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

这里我已经包含了摄像头,所以应该没问题。

level.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;
;


level.cpp: 但这里却声称 myCamera 未定义。

level::level(Input *in)

    // Store pointer for input class
    input = in;

    //OpenGL settings
    glShadeModel(GL_SMOOTH);                            
    glClearColor(0.39f, 0.58f, 93.0f, 1.0f);            
    glClearDepth(1.0f);                                     glClearStencil(0);                                  
    glEnable(GL_DEPTH_TEST);                            
    glDepthFunc(GL_LEQUAL);                             
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  
    glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);
    glEnable(GL_TEXTURE_2D);




    gluPerspective(55.0f, (GLfloat)width / (GLfloat)height, 1, 50.0f);


    camera.position.x = 0;

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

【问题讨论】:

你需要给我们更多的scene.cppscene.h scene.h 这里我已经包含了相机头,所以应该没问题 -- 如果该头包含在两个或多个 C++ 编译单元中,那就不好了.您有一个全局变量,当链接器获取您的模块时,该变量将被多次声明,从而导致链接器错误。 请附上minimal reproducible example。您发布的代码应该足以重现错误但不会更多(如果与问题无关,您不必发布三角计算) 看来scene.cpp 没有#include "scene.h"。很难确定,因为scene.cpp 是摘录而不是minimal reproducible example。 @PaulMcKenzie 我唯一一次包含 camera.h 是在 camera.cpp 中 【参考方案1】:

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

所以当你尝试编译camera.cpp时,预处理器首先包含camera.h。在那里它看到了scene.h 的包含。在scene.h 中,它再次看到camera.h 的包含,但#pragma once 将阻止它再次被包含。请注意,此时,camera.h 只被读取到#include "scene.h"。因此,当编译器到达camera myCamera时,camera的类型是未定义的,因为对应的头文件还没有完全读取。

要解决此问题,请删除 camera.h 中包含的 scene.h。反正你不会在那里使用它。如果您需要那里的类型,请考虑使用forward declaration。

还有,有这个:

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

没有意义。 #pragma once 完成与包含保护 _SCENE_H 相同的任务。使用其中之一,而不是两者。

【讨论】:

以上是关于错误说“相机未定义”,但我确实定义了它的主要内容,如果未能解决你的问题,请参考以下文章

出现未定义的类类型错​​误,但我确实创建了类并定义了它

从 Vue CLI(Vue 3)迁移到 Vite:未捕获(承诺中)类型错误:无法解构“未定义”的属性“默认”,因为它未定义

Python,如果带有变量的语句错误说未定义

Gatsbyjs 中的自定义导航栏

在全局变量中存储 getJSON 数据,但后来说它未定义

电子“要求未定义”