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