我有以下课程:
//myClass.h
myClass{
int data;
public:
myClass();
void foo1(int);
void foo2();
~myClass();
};
//myClass.cpp
#include"myClass.h"
myClass::foo1(int a){
data = a ;
}
// main
int main(){
myClass m;
m.foo1(10);
}
为什么我们可以有一个未实现的函数(即头文件中的函数原型,但.cpp 文件中没有定义),但不能有一个未实现的默认构造函数或析构函数?
如果我未实现默认构造函数/析构函数(如上面的示例),为什么会出现编译器错误?
undefined reference to myClass::myClass()
当我没有实现构造函数时,我看到了一个undefined reference to vtable for myClass
,当我没有实现析构函数时,我看到了一个。但是,如果我实现了这两个(即使是空的块{}
),并且没有实现一个方法(例如foo2()
),编译器不会抱怨。
构造函数/析构函数本质上不只是类中的方法吗?如果是这样,为什么我可以有一个未定义的方法foo2()
,但没有未定义的构造函数或析构函数?
如果有人可以帮助我理解这一点(而不仅仅是“因为它就是这样”:),那将不胜感激。