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类的指针和引用。

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

相关推荐
秋邱9 分钟前
用 Python 写出 C++ 的性能?用CANN中PyPTO 算子开发硬核上手指南
开发语言·c++·python
我在人间贩卖青春27 分钟前
C++之析构函数
c++·析构函数
wenzhangli730 分钟前
ooderA2UI BridgeCode 深度解析:从设计原理到 Trae Solo Skill 实践
java·开发语言·人工智能·开源
灵感菇_44 分钟前
Java 锁机制全面解析
java·开发语言
我在人间贩卖青春1 小时前
C++之数据类型的扩展
c++·字符串·数据类型
wazmlp0018873691 小时前
python第三次作业
开发语言·python
娇娇乔木1 小时前
模块十一--接口/抽象方法/多态--尚硅谷Javase笔记总结
java·开发语言
明月醉窗台1 小时前
qt使用笔记六之 Qt Creator、Qt Widgets、Qt Quick 详细解析
开发语言·笔记·qt
wangjialelele1 小时前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先
苏宸啊1 小时前
C++栈和队列
c++