我的运动有点问题。我有2节课:

首先 :

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(const char* a);
    ~ConcreteClass();

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

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

};


第二类的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;
}


但是我主要是在打电话时:

const char* s = "";
Abstract::AbstractClass* a = ConcreteClass::CreateConcreteClass(s);


在编译中,向我显示一个错误LNK2019:


  “公共:静态类ConcreteClass * __cdecl ConcreteClass :: CreateConcreteClass(char const *)”(?CreateConcreteClass @ ConcreteClass @@ SAPAV1 @ PBD @ Z)


在最后一行。为什么呢

最佳答案

啊,明白了:

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


不是以下内容的声明:

ConcreteClass::CreateConcreteClass(s)


我会留给您找出解决方法,因为它是一种很好的学习体验,而且我100%肯定您不需要练习复制粘贴-否则您可以等待,因为我我敢肯定,其他人很快就会发布“固定”答案,仅仅是因为他们不在乎您是否学习。

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

关于c++ - 抽象功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16082282/

10-12 18:13