未知的替代说明符

Unknown override specifier

本文关键字:说明符 未知      更新时间:2023-10-16

我正在从事多个类的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"

和包含结构体 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似乎只包含一次,而粒子类应该知道工具包含vec3。我试图在粒子类开始时声明struct vec3,但它不起作用。

#include "Tools.h"放在stdafx.h里面似乎可以消除问题,尽管我不明白为什么。Tools.h被包含在这里的所有类(ParticlePlayer(中,尽管被多次包含,但它应该只使用#ifndef指令包含一次。尽管如此,在我看来,编译器无法看到Tools.hParticle内部。有人可以解释为什么会发生这种情况以及为什么将标头放在文件中stdafx.h可以解决问题?