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)
在最后一行.为什么?
啊,得到了它:
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 - 或者你可以等待,因为我我相信其他人很快会发布一个"固定"的答案,只是因为他们不在乎你是否学习.
编辑:澄清.您已在类中声明了静态成员函数.并且您已经定义了一个不是任何类的成员的静态函数.