c++ - 抽象函数

标签 c++ function abstract

我的练习有点问题。我有 2 个类(class):

第一个:

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);

在编译中,Visual out me an error LNK2019 :

"public: static class 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/

相关文章:

c++ - std::dec 仍在将内存地址输出为十六进制?

Perl 作用域函数奇怪吗?

C#:在接口(interface)中实现抽象属性以实现子级

c++ - 如何使用new创建指向结构的指针数组?

c++ - 数组元素和指针值上的新布局

javascript - 有没有办法用一个函数包装所有的 JavaScript 方法?

c++ - Arduino/C++ 中的函数/方法定义错误。还是语法错误?

c# - 任何实现类似于 "abstract static member"的东西的方法

interface - 是否可以在 Kotlin 接口(interface)中指定静态函数?

c++ - 将 opencv 图像转换为 gdi 位图不起作用取决于图像大小