我很高興在C++中工作,直到編譯時間到達。我有幾個類在一些命名空間(讓我們稱之爲N);其中兩個類對應一個基類,另一個類從它派生。每個類都有自己的一對.hpp和.cpp文件;我認爲它會是這樣的:從C++中的相同名稱空間中的類繼承的問題
namespace N{
class Base{
};
class Derived: public Base{
};
}
然而,G ++(也許連接器)不斷告訴我:
Derived.hpp:n: error: expected class-name before ‘{’ token
它不承認基地作爲一個階級,甚至當我有正確的#include '將與其定義相對應的hpp文件編輯爲Derived的.hpp!
「這件事情與#包括」,我想,因爲這些類.hpps在其他文件#included,以便我在Derived.hpp將此添加到衍生聲明:
#include "Base.hpp"
namespace N{
class Base;
class Derived: public Base{
};
}
而現在G ++抱怨:
Derived.hpp:n: error: invalid use of incomplete type ‘struct N::Base’
所以,我迷路了。請幫助我,我會做很多工作。 (順便說一下,我對Python非常有經驗,而不是C++,所以這個問題對我來說真的很奇怪,而且我改變了類的名字和東西:)。
編輯:我的文件更準確的表示是:
File Pieza.hpp
-----------------------
#include "Celda.hpp"
namespace Reglas
{
class Pieza
{
public:
Pieza() {}
virtual ~Pieza() {}
private:
Celda *c;
};
}
File Jugador.hpp
-----------------------
#include "Jugada.hpp"
#include "Excepciones.hpp"
#include "Pieza.hpp"
namespace Reglas
{
//compiler asked for these :S
class Celda;
class Tablero;
class Jugador : public Pieza
{
public:
Jugador() {}
virtual ~Jugador() {}
};
}
首先,這些是編譯器錯誤,而不是鏈接器錯誤。鏈接器在編譯後發生,並且尚未通過。其次,告訴我們你的文件是如何組織的,這兩個類是在同一個頭文件中定義的?你是否正確地將它們包含在實現文件中? – 2010-02-11 18:41:44
你不是以智能的方式提出這個問題。你張貼你認爲應該編譯的內容。我們同意,它應該。你沒有發佈你的頭文件的真實內容,也沒有辦法從你的片段中看出他們有什麼問題。 – 2010-02-11 18:56:17
謝謝,我已經編輯了我的問題。 – Fabzter 2010-02-11 18:59:40