所以,我大約一年前開始學習C++,在此之前我學習了Java C#和VB.NET。現在,我認爲自己是一個先進的C++編碼器。然而,有一件事我沒有完全得到。鏈接過程。繼承人的問題。 現在,即時編碼類遊戲開發XNA庫,與基本的組件系統 - ,但我在編譯時得到編譯器錯誤,C++假裝它不知道具體類型,在這種情況下,GameComponent類不知道ComponentSelector類(反之亦然),儘管其正確包含和鍵入。我要告訴你我的兩個頭文件,希望你能幫助我。C++沒有找到類型定義?
ComponentSelector.hpp:
#ifndef COMPONENTSELECTOR_HPP
#define COMPONENTSELECTOR_HPP
#include<sem/System/Types.hpp>
#include<sem/System/GameComponent.hpp>
#include<vector>
namespace sem
{
class ComponentSelector
{
public:
GameComponent* getComponent1(); //GameComponent does not name a type
GameComponent* getComponent2(); //GameComponent does not name a type
GameComponent* getComponent3(); //GameComponent does not name a type
void addComponent(GameComponent* item); //GameComponent does not name a type
void removeComponent1();
void removeComponent2();
void removeComponent3();
void clearList();
private:
std::vector<GameComponent*> m_Components;
protected:
};
}
#endif // COMPONENTSELECTOR_HPP
GameComponent.hpp:
#ifndef GAMECOMPONENT_HPP
#define GAMECOMPONENT_HPP
#include<sem/System/ComponentSelector.hpp>
#include <sem/System/Types.hpp>
namespace sem
{
class GameComponent
{
public:
virtual void load() = 0;
virtual void unload() = 0;
virtual void update() = 0;
virtual void draw() = 0;
ComponentSelector* m_Selector; //ComponentSelector does not name a type
SEMlong getID();
SEMstring getName();
SEMstring getType();
private:
SEMlong m_ComponentID;
SEMstring m_ComponentName;
SEMstring m_ComponentType;
protected:
};
}
#endif // GAMECOMPONENT_HPP
任何解決方案和提示將不勝感激。
在你的第一套#includes之後,你應該輸入Class GameComponent。這被稱爲前向聲明。然後你可以稍後再實施,這就是你正在做的。 – CoryKramer
您似乎表示這裏有兩個頭文件,但您的問題佈局看起來只有一個。這些是在單獨的文件還是隻有一個?如果他們分開,請更新問題以反映這一點。 –
謝謝。我更新了它。 – calcyss