需要通过继承实施纯抽象类,使用命名空间来包装我的所有类,以避免与他人发生冲突的帮助。错误消息:纯抽象类包裹在一个命名空间在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