【c++初学】遇到问题:对xxx未定义的引用

在编译的时候遇到了 未定义引用

root@czp-PC:/mnt/hgfs/vmsd/cpp/class_static# g++ used.cpp 
/tmp/ccFDQ1NR.o:在函数‘main’中:
used.cpp:(.text+0xbc):对‘page::~page()’未定义的引用
collect2: error: ld returned 1 exit status
root@czp-PC:/mnt/hgfs/vmsd/cpp/class_static# 

原因是,这个析构函数~page()只在类的声明中写上了,
但是没写它的函数实体,所以在编译的时候报了这个错误

如果main函数里面没有调用跟这个类相关的东西,比如说通过这个类去实例化一个对象等等。。

然后做了一个测试,在main函数里面这样写

int main(void)
{
	page p1;	
	page p2;
	page p3;
	page p4;
	p1.print();

	return 0;
}

此时编译后的结果为

root@czp-PC:/mnt/hgfs/vmsd/cpp/class_static# g++ used.cpp 
/tmp/ccZV6y1O.o:在函数‘main’中:
used.cpp:(.text+0xe5):对‘page::~page()’未定义的引用
used.cpp:(.text+0xf1):对‘page::~page()’未定义的引用
used.cpp:(.text+0xfd):对‘page::~page()’未定义的引用
used.cpp:(.text+0x109):对‘page::~page()’未定义的引用
used.cpp:(.text+0x12b):对‘page::~page()’未定义的引用
/tmp/ccZV6y1O.o:used.cpp:(.text+0x137): 跟着更多未定义的参考到 page::~page()
collect2: error: ld returned 1 exit status
root@czp-PC:/mnt/hgfs/vmsd/cpp/class_static# 

可以发现,实例化一个对象的时候,它会检测这个object对应的class里面有没有构造函数和析构函数,并且有没有写他们的函数实体,如果没写的话就报错了,

我这里是实例化了4个对象,并且调用了其中一个对象里面的一个函数

我在想我才实例化了4个对象为什么报错5次

从此可以得出结论,就是当执行对象的函数的时候,执行完了,它也会执行一次析构函数进行收尾的,所以才会得出有5个报错。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值