1

私はファーストクラスを取得しました:

namespace Abstract{

    class AbstractClass{
    public:

        virtual void setName(const std::string & _name) =0;
        virtual void print() =0;
        void DynamicCastTest(){};

    };

}

そして2番目:

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で試してみました。仮パラメータ a の再定義のようなエラー C2082 が表示されます (ドイツ語をインストールしているため、エラー メッセージが異なる場合があります)。変数の名前を変更するだけです。

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

編集:一時的なアドレスを返さないために静的を追加しました

2 番目の編集: CreateConcreteClass を静的ファクトリ関数にしました

于 2013-04-18T09:54:13.160 に答える