这个错误完全是自己疏忽大意造成的。

首先我们知道,一个类如果是抽象类,我们就不能用这个类实例化一个对象。

什么样的类是抽象类呢?
C++没有C Sharp中的关键字abstract,但是当一个类中有一个或多个纯虚函数的时候,这个类就自动成为了抽象类,即不可以实例化。

纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。

在实际开发中,很多时候你都需要继承别人的类,或是同事写的类,或是一些开源库中的类。

也许是为了追求效率,我们很难认真阅读你要继承的基类,或者说你只关心基类中你需要的几个方法。

这个时候,就存在错误的风险。也许父类中有一个纯虚函数你完全不关系,用不到,你就会大摇大摆的忽略它。

但是它不会忽略你,记住:
如果你的抽象类的派生类有任何一个纯虚函数没有实现,那么不管其他做的再多,这个类仍然是一个抽象类。

所以用到你定义的子类实例化对象时候,会产生上述的错误。

好在编译器能够帮助我们,以至于可以及时改正。

所以,在继承一个类的时候,要确保实现了所有这个基类的纯虚函数。

//基类:
classA
public:
A();
virtual ~A();
void f1();
virtual void f2();
virtual void f3()=0;
//子类:
classB:publicA
public:
B();
virtual ~B();
void f1();
virtual void f2();
virtual void f3();
                                    ts-class-initializable
 一个小助手,用于从纯对象启用类实例属性的初始化。
 扩展一个Initializable类,您的类构造函数将接受一个普通对象文字作为其第一个参数,并将这些值分配给实例属性。
class Foo extends Initializable < Foo> {
  public bar : string ;
  public baz : number ;
  public optional ?: boolean ;
const instance : Foo = new Foo ( {
  bar : 'foobar' ,
  baz : 2 ,
} ) ;
console . log ( instance . bar ) ; // 'foobar'
有几种口味:
 Initializable :构造函数需要一个普通对象来初始化实例
                                    虚函数没有函数体就是纯虚函数,可以将虚函数声明为纯虚函数virtual 返回值类型 函数名(形参表)=0;最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统,该函数无函数体,即这是纯虚函数。包含纯虚函数的类称为抽象类(Abstract Class)。之所以说它抽象,是因为它无法实例化,也就是无法创建对象。
                                    如果一个类被声明为抽象类,它包含至少一个纯虚函数(Pure Virtual Function),那么该类就不能实例化对象纯虚函数是通过在函数声明中使用 "= 0" 来指定的,它们没有具体的实现,需要在派生类中实现。:如果一个类的默认构造函数被删除(deleted),则无法使用默认构造函数创建该类的对象。:如果一个类从纯虚基类派生而来,但没有重写基类中的纯虚函数,那么派生类也将成为一个抽象类不能实例化对象。:如果一个类只是作为类型别名使用,而不是作为具体的实现类,那么不能直接实例化该类的对象抽象类定义C++中规定,含有纯虚函数的类称为抽象类抽象类的特性如下:抽象类不能实例化不能定义抽象类对象;可以定义抽象类的指针和引用,目的是可以通过指针或引用对其子类进行操作;抽象类的子类如果没有实现其全部纯虚函数,则该子类依旧是抽象类抽象类不能实例化是有实际含义的,比如Animal和其子类Duck中,显然不能给Animal类定义具体对象抽象类的作用       根据前...
                                    开闭原则(Open-Close Principle,简称OCP)是指一个软件实体(类、模块、方法等)应该对扩展开放,对修改关闭。遵循开闭原则设计出来的模块具有两个基本特征:对于扩展是开放的(Open for extension):模块的行为可以扩展,当应用的需求改变时,可以对模块进行扩展,以满足新的需求。对于更改是封闭的(Closed for modification):对模块行为扩展时,不必改动...
                                    大家都知道空类可以实例化一个对象并且,其大小为一个字节,抽象类不可以实例化一个对象,但是关于抽象类没有说明为什么其不可以实例化。
1. 空类
即定义了一个类但是在其中没有定义成员变量和函数,仅仅是写了一个类名称,如下面这种形式:
class A{};
但是这样的类依然可以实例化一个对象,并且每个对象都有唯一地址空间存放:
C++语言标准中规定了这样一个原则:“no object shall have the same address in memory as any other variable”,即任
                                    方法借鉴:https://blog.csdn.net/weixin_43860261/article/details/88672429
平台:VS2017,opencv4.0.1进行编程
报错问题:在定义ORB对象的时候报错,不允许使用抽象类类型“cv::ORB”的对象
为什么会报错?
角点检测的几个方法(SURF,SIFT,ORB)都被转移opencv_contrib中了。所以版本之间有差异。
                                    在c++和java中我们会定义很多类,但是我们会遇到在对类进行new实例化时会遇到“不能实例化抽象类”或者“抽象类不能实例化”,针对这个问题要首先理解两个内容“抽象类”和“实例化”
如果只是想单纯的理解,那么意思就是你画了一个有四条边的图形你说是矩形
但是这是不可以的,为什么?因为矩形还有一个条件就是要四个内角是直角
其中画有四条边的图形就是抽象类,矩形就是实例化
如果理解了含义但是不懂代码中的定义,那么那么就百度百度定义定义真的很重要!
抽象类定义:
含有纯虚函数的类称为抽象类
一个是从语法的角度,一个是从实际意义的角度。
两种角度都可以解释这个现象。
其实仔细想想,这两种解释实际上是一个事情,就是说因为抽象类中含有未定义的操作,如果抽象类实例化,代表着这个操作是可以执行的。如果执行一个未定义的操作,会出现意料之外的问题。
因此,抽象类不能实例化