c++前置前置声明(函数与类)

c++是以c的为基础进行后来改进的,而学过c语言的都知道,在c语言中,有时我们不可避免的要用声明,因为有时候我们在定义函数的时候,函数的定义写在了.cpp或是.c文件,而函数的声明我们一般放到了头文件中。一般也都说是定义最好不要写到头文件中,这样可能会导致头文件空间变大(只是建议不要放在头文件中,不是不可以)。而在C++中,因为其实面向对象编程的语言,所以不我们有时会在头文件中定义类,而此时可能会出现已一种报错,就是使用了不完整的类型。而出现这种错误的本质是使用了前置声明。

声明是什么意思,就不多说了,很简单,也很好理解,但是声明也是有大坑的。我们先看看下面的代码。

cpp 复制代码
#include <iostream>
using namespace std;
class A;
void fun()
{
	A s;
}
class A
{
public:
	int a = 0;
};
int main()
{
	fun();
	return 0;
}

这段代码编译的时候会报错吗?无疑是会报错的。为什么呢?很简单的一个原因,就是虽然我们使用了前置声明来告诉编译器存在A这个类,但是编译器此时并不知道的是A这个类的大小是多少,具体有哪些成员函数或者成员变量,所以我们在fun这个函数中使用A类实例化对象的时候,无法使用。若是此时你把类的包装到了头文件,而在类一个头文件中使用这个包装的类的时候,就会出现使用不完整的类的报错。这里虽然不可以使用A类实例化对象,但是可以定义A类的指针和引用。

那有些朋友可能就疑惑了,类在声明之后,定义之前不可以使用其成员变量或者是成员函数,为什么函数声明的时候,在定义之前,声明之后,这之间就可以使用呢?函数调用其实是在链接阶段来进行。也就是你只要实现了函数的定义,那么在链接阶段就会去找,如果有,那么就会运行,如果没有,那么就会报错,出现链接错误。

相关推荐
重生之我要当java大帝几秒前
java微服务-尚医通-编写医院设置接口下
java·开发语言·sql
寻找华年的锦瑟几秒前
Qt-QDir
开发语言·qt
小妖66613 分钟前
vscode 怎么运行 c++ 文件
开发语言·c++
weixin_3077791314 分钟前
在 Microsoft Azure 上部署 ClickHouse 数据仓库:托管服务与自行部署的全面指南
开发语言·数据库·数据仓库·云计算·azure
鱼鱼说测试16 分钟前
Linux下运行Jmeter
开发语言·python
lingran__17 分钟前
算法沉淀第三天(统计二进制中1的个数 两个整数二进制位不同个数)
c++·算法
鱼鱼说测试25 分钟前
postman功能接口测试
开发语言·lua
Achou.Wang26 分钟前
源码分析 golang bigcache 高性能无 GC 开销的缓存设计实现
开发语言·缓存·golang
绵羊20231 小时前
R语言绘制热图
开发语言·r语言
小冯记录编程1 小时前
深入解析C++ for循环原理
开发语言·c++·算法