1、工厂类方法,无法通过父类指针获取子类指针
简化代码如下
// 抽象产品类.h
#include "concreteProduct.h"
class AbstractProduct {
public:
virtual ~AbstractProduct() = 0;
virtual void printName() = 0;
}
// 具体产品类.h
#include "AbstractProduct.h"
class ConcreteProduct : public AbstractProduct {
public:
~ConcreteProduct() override = default;
void printName() override {
printf("hahaha\n");
}
}
// 工厂类.h
#include "Abstractproduct.h"
class Factory {
public:
Factory() = default;
~Factory() = default;
AbstractProduct* GetProduct() {
return new ConcreteProduct(); // Error:无法返回AbstractProduct类指针
}
}
原因: 抽象产品类(AbstractProduct.h)和具体产品类(ConcreteProduct.h)头文件 循环依赖 ,并且在基类(抽象产品类)定义之前包含了子类(具体产品类)的头文件,无法正常识别继承关系。
2、error LNK20xx: 无法解析的外部符号
class Base {
public:
virtual ~Base() = 0; // 编译error:纯虚函数没有定义体
virtual void PrintName() = 0;
};
class CA : public Base {
public:
~CA() override = default;
void PrintName() override {
printf("This is CA.\n");
}
};
int main()
{
CA A;
A.PrintName();
system("pause");
return 0;
}
错误: error LNK2019: 无法解析的外部符号
原因: 基类中析构函数没有定义,基类修改如下后编译通过
class Base {
public:
virtual ~Base() = default;
virtual void PrintName() = 0;
};