需要通過繼承實施純抽象類,使用命名空間來包裝我的所有類,以避免與他人發生衝突的幫助。錯誤消息:純抽象類包裹在一個命名空間在C++
我已經能夠建立併成功運行的代碼,如果我從我的抽象類,並從我的純抽象類繼承所有課程中移除命名空間的包裝。
這似乎是Visual Studio 2010的編譯器抱怨說,儘管所有的類都在同一個命名空間,抽象類的純抽象方法未實現。
任何幫助將不勝感激。
//IBaseClass.h
//forward declaration
class ConcreteClass;
//namespace MyCustomNamespace
//{
class IBaseClass
{
public:
virtual ~IBaseClass() { /*virtual destructor*/ }
//Behaviours...
virtual bool Method001(const ConcreteClass &cc) = 0;
//virtual bool Method002(/*some input*/) = 0;
};
//} /*NAMESPACE*/
//-----------------------------------------
//ParentClass.h
//namespace MyCustomNamespace
//{
class ParentClass : virtual public IBaseClass
{
private:
int a;
public:
virtual ~ParentClass() { /*virtual destructor*/ }
//getter-setter implemented in ParentClass.cpp file...
void setA(const int aa);
const int getA() const;
};
//} /*NAMESPACE*/
//-----------------------------------------
//ConcreteClass.h
//namespace MyCustomNamespace
//{
class ConcreteClass: public ParentClass
{
private:
int b;
public:
virtual ~ConcreteClass() { /*virtual destructor*/ }
//getter-setter...
void setB(const int bb);
const int getB() const;
bool Method001(const ConcreteClass &cc); //re-declaring IBase abstract method...
};
//} /*NAMESPACE*/
//-----------------------------------------
//ConcreteClass.cpp
//namespace MyCustomNamespace
//{
void ConcreteClass::setB(const int bb) { this->b = bb; }
const int ConcreteClass::getB() const { return this->b; }
bool ConcreteClass::Method001(const ConcreteClass &cc)
{
//implementation code goes here...
return false;
}
//} /*NAMESPACE*/
這實際工作正常,我。你能發佈錯誤嗎? – 2012-02-05 09:59:29
我在這裏發佈的代碼有效,如果您在每個類的.h和.ccp文件中取消註釋命名空間部分,那麼它會拋出錯誤mgs,我的ConcreteClass是一種抽象方法。這似乎是編譯器無法弄清楚,我已經實現了純粹的抽象方法在我的具體類,除非我從使用IBASE類 – badboy11 2012-02-05 10:06:21
隨着命名空間沒有註釋的所有類中刪除的命名空間,它[仍然有效(HTTP:/ /ideone.com/cpv7x)。你能發佈導致錯誤的確切代碼(和確切的錯誤信息)嗎? – 2012-02-05 10:21:09