[英]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
包括CursorMano
, CursorMano
包括NodeButton
)。 嘗試刪除NodeButton.h中的#include "CursorMano.h"
並添加class CursorMano;
在NodeButton
聲明之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.