7

このコードでこのコンパイラ エラー (C2011) が発生しました。何が悪いのかわかりません。

名前空間 (Ogre) には の定義がありませんPlaneMovement。別の名前も試しましたが、それでも同じエラーが発生します。

#include <Ogre.h>

using namespace Ogre;

class PlaneMovement
{
public:
    PlaneMovement(Degree startingAngle, Real velocity = 2, Real gravity = 2);
    Vector2 updateMovement(const FrameEvent& evt);
private:
    Degree currentAngle;
    Real currentVelocityX;
    Real currentVelocityY;
    Real gravity;
    bool top;
};
4

4 に答える 4

30

ガードを含める:

#ifndef FILE_H
#define FILE_H

//file contents here

#endif

まさにこの理由から、ヘッダー ファイルにはインクルード ガードが必要です。同じ翻訳単位に複数のインクルードがあると、複数の定義が発生する可能性があります。

代替手段は使用しています

#pragma once

ただし、これはすべてのコンパイラでサポートされているわけではありません。

于 2013-01-04T20:31:49.293 に答える
0

不正な前方宣言

あなたが私のような間抜けなら、別の考えられる原因は、前方宣言するときenumに代わりに使用した可能性があります。classclass

File1.h

namespace MyNamespace { enum NotActuallyAnEnum; }

File2.h

class NotActuallyAnEnum

{
...
}

これにより、次のようなエラーが発生します。

error C2011: 'enum' type redefinition

明らかに、修正は前方宣言を修正することです。

namespace MyNamespace { class NotActuallyAnEnum; }
于 2015-04-21T00:12:12.727 に答える