簡體   English   中英

C ++中的未知類型錯誤

[英]unknown type error in C++

到底是怎么回事?

#include "MyClass.h"

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

    MyClass myVar; //Unknown type Error
};

突然,當我包含.h並寫道var Xcode給了我很多錯誤......還有未知類型錯誤。

當.h被包含在那里時怎么可能不知道?

這是NodeButton.h文件,它對應於示例中的MyClass.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:
};

以下是CursorMano.h的內容,它們對應於示例中的MyOtherClass.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;
};

您具有頭文件的循環依賴關系。

NodeButton.h定義了CursorMano.h需要包含的NodeButton類,以便編譯器可以看到NodeButton定義,但NodeButton.h本身包含CursorMano.h

您將需要使用前向聲明來打破此循環依賴項。

NodeButton.h您只需使用指向CursorMano的指針,因此您不需要包含CursorMano.h只需在using namespace聲明之后向前聲明該類。

using namespace std;
using namespace is;

class CursorMano;

這可能是兩個頭文件之間循環依賴的結果( NodeButton包括CursorManoCursorMano包括NodeButton )。 嘗試刪除NodeButton.h中的#include "CursorMano.h"並添加class CursorMano; NodeButton聲明之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM