2012-02-07 14 views
3

何が起こっていますか?私は.Hが含まれており、書き込み時にC++で不明な型のエラー

#include "MyClass.h" 

class MyOtherClass { 
    public: 
    MyOtherClass(); 
    ~MyOtherClass(); 

    MyClass myVar; //Unknown type Error 
}; 

は突然、そのVaRのXcodeは私にエラーのトン...とも不明なタイプのエラーが発生します。

.hが含まれていると、どのように不明になるのですか?ここで

は例

#pragma once 

#include "cinder/Vector.h" 
#include "cinder/gl/gl.h" 
#include "cinder/gl/Texture.h" 
#include "cinder/Color.h" 
#include "cinder/ImageIo.h" 
#include "cinder/Timeline.h" 
#include "cinder/app/AppBasic.h" 
#include "cinder/App/App.h" 

#include "Node.h" 
#include "CursorMano.h" 

using namespace ci; 
using namespace ci::app; 
using namespace std; 
using namespace is; 

typedef boost::shared_ptr<class NodeButton> NodeButtonRef; 


class NodeButton : public Node2D 
{ 
    public: 
     NodeButton (CursorMano *cursor, string imageUrl, bool fadeIn = false, float delay = 0.0f); 
     virtual ~NodeButton(); 

     //methods 
     void update(double elapsed); 
     void draw(); 
     void setup(); 

     //events 
     bool mouseMove(ci::app::MouseEvent event); 

     //vars 
     CursorMano  *mCursor; 
     gl::Texture  mImageTexture; 
     Anim<float>  mAlpha = 1.0f; 
     bool   mSelected = false; 

    private: 
}; 

でMyClass.hに対応し、ここでは一例でMyOtherClass.hに対応するであろうCursorMano.hの内容があるでしょうNodeButton.hファイルです。

#pragma once 

#include <list> 
#include <vector> 

#include "cinder/app/AppBasic.h" 
#include "cinder/qtime/QuickTime.h" 
#include "cinder/gl/Texture.h" 
#include "cinder/Vector.h" 

#include "NodeButton.h" 

using namespace ci; 
using namespace ci::app; 
using namespace std; 

class CursorMano { 
    public: 
     CursorMano (AppBasic *app); 
     ~CursorMano(); 

     void mueveMano(Vec2i); 
     void update(); 
     void draw(); 
     void play(int button); 
     void reset(int button); 

     Vec2i mMousePos; 
     NodeButton     mButtonCaller; //this gives the unknow type error 

    private: 
     AppBasic     *mApp; 
     gl::Texture     mFrameTexture; 
     qtime::MovieGl    mMovie; 
     int       mIdButton; 
}; 
+4

「MyClass.h」の内容は何ですか?また、 'MyOtherClass'とそのctor-dtorのスペルは一致しません! – iammilind

+0

'MyClass.h'を表示できますか? – birryree

+0

これを手助けするコードがさらに必要です。 MyClass.hの全内容とこのヘッダーの全内容を表示できますか? – templatetypedef

答えて

7

ヘッダーファイルの循環依存性があります。

NodeButton.hCursorMano.h自体がCursorMano.hが含まので、コンパイラはNodeButtonの定義を見ることができます含まれている必要がありますがNodeButton.hNodeButtonクラスを定義します。

この循環依存関係を解除するには、前方宣言を使用する必要があります。

NodeButton.hあなたはCursorManoへのポインタを使用していますので、CursorMano.hを含める必要はありません。使用する名前空間宣言の後にクラスを順方向に宣言してください。

using namespace std; 
using namespace is; 

class CursorMano; 
+0

がありますが、どうすれば両方のクラスを互いに参照できますか? – Pier

+1

@Pier:NodeButton.hの 'CursorMano'を前方に宣言して(クラス' CursorMano; 'を書く)、NodeButton.hから' #include "CursorMano.h"を削除します。 – Mankarse

+0

ああ、私の答えを入力していたのと同じように。 – kevintodisco

1

それはおそらく2つのヘッダファイル(NodeButtonCursorManoCursorManoNodeButtonを含んを含みます)との間に循環依存関係の結果です。 NodeButton.hの#include "CursorMano.h"を削除し、宣言の前にclass CursorMano;を追加してみてください。