我的相机功能不起作用。该错误表明myCamera
未定义,但我 did 对其进行了定义。
根据错误消息,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;
这里是摄像机类别;但是没有错误消息,因此,如果这里有什么问题,我不知道是什么。
答案 0 :(得分:2)
您具有循环包含依赖关系。 scene.h
包括camera.h
,而camera.h
包括scene.h
。
因此,当您尝试编译camera.cpp
时,预处理器首先包含camera.h
。在其中可以看到scene.h
的包含。在scene.h
中,再次看到了camera.h
的包含,但是#pragma once
将阻止再次包含它。请注意,此时camera.h
才被读取,直到#include "scene.h"
。因此,当编译器进入camera myCamera
时,类型camera
尚未定义,因为尚未完全读取相应的头文件。
要解决此问题,请删除scene.h
中包含的camera.h
。无论如何,您都不在那里使用它。如果您需要从那里输入类型,请考虑使用forward declaration。
此外,还有这个:
#pragma once
...
#ifndef _SCENE_H
#define _SCENE_H
没有道理。 #pragma once
完成与包含保护_SCENE_H
相同的任务。使用其中之一,而不是两个。