2017-08-02 125 views
0

私は複数のクラスの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 

を私は粒子クラス(ヘッダファイル)を持っていますなぜなら、Tools.hは一度しか含まれていないようで、ParticleクラスはToolsにvec3が含まれていることを知っているはずです。私は粒子クラスの冒頭にstruct vec3を宣言しようとしましたが効果がありませんでした。私は何の効果もなかったので、ヒントや助けに感謝します。

+1

particle.hはtools.hのwhatsについて知っていますか? – Eddge

+0

C++ 11でコンパイルしていますか? 'override'キーワードはC++ 11以降では新しくなっています(あなたが指定したコードでは使用されていませんが)。 – CoryKramer

+1

' Particle.cpp'以外のファイルに 'Particle.h'を含む可能性があります。その時点では、 'Tools.h'は含まれていないかもしれません。必要なヘッダーを 'Particle.h 'に含めます。ヘッダーを2回インクルードすることには何も問題ありません。特に、 '#include'ガードと' #pragma once'の両方によって保護されているようです。 –

答えて

0

stdafx.hの中に#include "Tools.h"を配置すると、その理由がわかりませんが、この問題を解決するようです。 Tools.hはすべてのmetionedクラス(ParticlePlayer)に含まれていましたが、複数回含まれていましたが、#ifndefディレクティブを使用して1回だけ含める必要があります。その事実にもかかわらず、コンパイラはParticleクラス内にTools.hを見ることができなかったようです。誰かがなぜそれが起こったのか、なぜstdafx.hファイル内にヘッダーを配置すると問題が解決するのか説明してください。

関連する問題