未知的覆盖说明符

时间:2017-08-02 18:16:17

标签: c++ visual-studio-2015

我正在研究多个班级的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并且它不起作用我也做了一些没有效果的研究,所以我会感谢任何提示和帮助。

1 个答案:

答案 0 :(得分:0)

#include "Tools.h"置于stdafx.h内似乎可以解决问题,但我不明白为什么。 Tools.h包含在所有提到的类中(ParticlePlayer),尽管被多次包含,但只能使用#ifndef指令包含一次。尽管如此,在我看来,编译器在Tools.h类中看不到Particle。有人可以解释为什么会发生这种情况以及为什么在stdafx.h文件中放置标题会解决问题?