抽象功能

Apa*_*hee 0 c++ function abstract

我的运动有点问题.我有2个班:

首先 :

namespace Abstract{

    class AbstractClass{
    public:

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

    };

}
Run Code Online (Sandbox Code Playgroud)

第二 :

class ConcreteClass : public Abstract::AbstractClass{

    std::string type;

public:
    ConcreteClass();
    ConcreteClass(const char* a);
    ~ConcreteClass();

    static Abstract::AbstractClass* CreateConcreteClass(const char* a);

    virtual void setName(const std::string & _name); 
    virtual void print(); 

};
Run Code Online (Sandbox Code Playgroud)

和第二类的cpp文件:

#include "concreteClass.h"

ConcreteClass::ConcreteClass(){
    type = "";
}

ConcreteClass::ConcreteClass(const char* a){
    type = a;
}

ConcreteClass::~ConcreteClass(){}

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

void ConcreteClass::setName(const std::string & _name){
    type = _name;
}

void ConcreteClass::print(){
    std::cout<<type<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但在我的主要时,我打电话:

const char* s = "";
Abstract::AbstractClass* a = ConcreteClass::CreateConcreteClass(s);
Run Code Online (Sandbox Code Playgroud)

在编译中,Visual了我一个错误LNK2019:

"public:static class ConcreteClass*__cdecl ConcreteClass :: CreateConcreteClass(char const*)"(?CreateConcreteClass @ ConcreteClass @@ SAPAV1 @ PBD @ Z)

在最后一行.为什么?

Mat*_*son 5

啊,得到了它:

static ConcreteClass* CreateConcreteClass(const char* a){
    return new ConcreteClass(a);
}
Run Code Online (Sandbox Code Playgroud)

不是声明:

ConcreteClass::CreateConcreteClass(s)
Run Code Online (Sandbox Code Playgroud)

我会留给你弄清楚修复是什么,因为这是一个很好的学习经历,我100%肯定你不需要练习copy'n'paste - 或者你可以等待,因为我我相信其他人很快会发布一个"固定"的答案,只是因为他们不在乎你是否学习.

编辑:澄清.您已在类中声明了静态成员函数.并且您已经定义了一个不是任何类的成员的静态函数.