我正在研究多个班级的CPP项目,我已经坚持了一段时间。我有粒子类(头文件):
#pragma once
#ifndef PARTICLE_H
#define PARTICLE_H
class Particle {
private:
vec3 pos; // <- here I get an error
vec3 dir;
float speed;
float size;
float amb[3];
public:
Particle();
Particle(bool sludge);
inline void setPosX(float posX);
inline void setPosY(float posY);
inline void setPosZ(float posZ);
inline void setSpeed(float speed);
inline void setSize(float size);
void setAmb(float amb0, float amb1, float amb2);
inline float getPosX();
inline float getPosY();
inline float getPosZ();
inline float getDirX();
inline float getDirY();
inline float getDirZ();
inline float getSpeed();
inline float getSize();
void renderParticle();
void renderSludge();
};
#endif
和cpp文件包含(为简单起见):
#include "stdafx.h"
#include "Tools.h"
#include "Particle.h"
#include "Player.h"
和Tools类,包含struct vec3:
#pragma once
#ifndef TOOLS_H
#define TOOLS_H
void distance(float posX1, float posY1, float posZ1, float radius1, float posX2, float posY2, float posZ2, float radius2);
int fibonacci(int num);
GLuint LoadObj(char * file);
GLuint LoadTexture(char * file, int magFilter, int minFilter);
void drawSphere(float r, int divisions);
void OnRender();
void OnReshape(int, int);
void OnKeyPress(unsigned char, int, int);
void OnKeyDown(unsigned char, int, int);
void OnKeyUp(unsigned char, int, int);
void OnTimer(int);
struct vec3 {
float x, y, z;
};
struct SFace {
int v[3];
int n[3];
int t[3];
};
#endif
我得到了:Error C3646 'pos': unknown override specifier
,我不明白为什么,因为Tools.h
似乎只包含一次,而且Particle类应该知道工具包含vec3
。我试图在粒子类的开头声明struct vec3
并且它不起作用我也做了一些没有效果的研究,所以我会感谢任何提示和帮助。
答案 0 :(得分:0)
将#include "Tools.h"
置于stdafx.h
内似乎可以解决问题,但我不明白为什么。 Tools.h
包含在所有提到的类中(Particle
和Player
),尽管被多次包含,但只能使用#ifndef
指令包含一次。尽管如此,在我看来,编译器在Tools.h
类中看不到Particle
。有人可以解释为什么会发生这种情况以及为什么在stdafx.h
文件中放置标题会解决问题?