我上了第一堂课:
namespace Abstract{
class AbstractClass{
public:
virtual void setName(const std::string & _name) =0;
virtual void print() =0;
void DynamicCastTest(){};
};
}
还有第二个:
class ConcreteClass : public Abstract::AbstractClass{
std::string type;
public:
ConcreteClass();
ConcreteClass(char* a);
~ConcreteClass();
static ConcreteClass* CreateConcreteClass(char* a);
virtual void setName(const std::string & _name);
virtual void print();
};
但是当我想定义我的函数CreateConcreteClass(char *)时:
static ConcreteClass* CreateConcreteClass(char* a){
ConcreteClass a;
}
视觉无法创建对象'a',因为它告诉我它是一个抽象对象。
为什么?
答案 0 :(得分:3)
我用VC10尝试过。它给了我错误C2082告诉我像重新定义形式参数a(我有一个德语安装,所以你的错误信息可能会有所不同)。 只需重命名您的变量:
ConcreteClass* ConcreteClass::CreateConcreteClass(char* a)
{
return new ConcreteClass(a);
}
编辑:添加静态,以便不返回临时
的地址第二次编辑:使CreateConcreteClass成为静态工厂函数