1

我上了一堂课:

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”,因为它告诉我它是一个抽象对象。

为什么 ?

4

1 回答 1

3

我用VC10试过了。它给了我错误 C2082,告诉我重新定义形式参数 a 之类的东西(我有一个德语安装,所以你的错误消息可能不同)。只需重命名您的变量:

ConcreteClass* ConcreteClass::CreateConcreteClass(char* a)
{
    return new ConcreteClass(a); 
}

编辑:添加静态不返回临时地址

第二次编辑:使 CreateConcreteClass 成为静态工厂函数

于 2013-04-18T09:54:13.160 回答