我的运动有点问题。我有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/