注意事项
- 变量定义时就会赋初值(如int是0),所以定义包含声明,单纯声明不定义的话,要加extern
- 同一个文件中,函数使用(调用)前必须定义(有{ }为定义),否则会报错;若先使用再定义,或定义和使用不在一个文件,需声明以告诉编译器(不要报错,会在之后定义),因为编译器只对一个文件进行编译
- 同一个文件中,类使用(实例化)前必须定义(有{ }为定义),否则要声明。同一个类,定义、声明、使用可能在三个文件中完成
- 永远不要在.h文件中定义变量。定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量
- 函数、类定义时不会分配内存,类实例化时会为变量分配内存
- 总结:使用前定义,否则声明
例1:一个project中包含三个文件
test1.cpp
#include <stdio.h> #include "test2.h" int main(){ printf("a=%d ",a); return 0; }
test2.h
extern int a;
test2.cpp
int a = 10;
>>a = 10
例2:
写法一:
//=============A.h start====================
#include <B.h>
class A
{
private:
B * impl;
};
//=============A.h end====================
写法二:
//=============A.h start====================
class B;
class A
{
private:
B * impl;
};
//=============A.h end====================
//=============A.cpp start====================
#include <A.h>
#include <B.h>
// 其他具体实现
........
//=============A.cpp end====================
写法一是使用前定义;写法二是使用前声明,随后定义
参考:
https://blog.csdn.net/skk18739788475/article/details/79643978