1. 项目结构
PlayAviVideo工程的整体目录结构就是这张图所显示的,这次用到的主要是头文件和源文件。头文件夹中放头文件定义,源文件中放源代码文件,其中main.cpp文件中是入口函数main,以及main函数对其他功能函数的调用。其他的cpp源文件是对头文件中声明函数的实现。
2. 头文件
头文件夹里包括一个头文件head.h,贴上代码
#ifndef HEAD_H
#define HEAD_H
#include "highgui.h"
//1.播放一个视频
int playAviVideo();
//2.播放缩放后的视频
int playScaleVideo();
#endif
头文件中包括一个#ifndef组合,一个头文件的引用(#include"highgui.h")以及两个函数声明(int playAviVideo();int playScaleVideo();)。
2.1 #Ifndef组合:使用方式如下:
#ifndef 标识符
#define 标识符
内容
#endif
组合用于头文件中,防止当前头文件被重复引用,重复编译。举个栗子,
头文件a
#include <iostream>
using namespace std;
头文件b
#include "a.h"
#include <string>
using namespace std;
源文件Demo.cpp
#include "a.h"
#include "b.h"
int main() {
return 0;
}
a.h引用了iostream头文件
b,h引用了a.h和string头文件
Demo.cpp引用了a和b两个头文件,然而头文件b中已经引用了头文件a(#include“a.h”),所以,此时,a头文件中的内容就被引用了两次。
代码量大的时候非常容易犯这种错误,那要如何避免这种情况呢?#ifndef!
#ifndef A_H
#define A_H
头文件内容
#endif
在ifndef结构中,标识符为自定义的一个符号,一般情况用当前头文件名的大写形式以示区分,比如a.h中标识符为A_H。如果当前头文件是第一次被编译,A_H肯定是没有被定义过的(#ifndef A_H),条件成立,那A_H则被定义一次(#define A_H),编译头文件内容,#endif与#ifndef对应,表示if结束;如果当前头文件已经被编译过,条件不成立,直接endif结束,不再编译头文件中的内容。
这样,就可以达到防止重复编译的目的。
2.2 #include
引入程序中需要用到的头文件
2.3 int playAviVideo();
头文件中预先声明函数,其定义根据功能不同放在不同源文件中,如果这里不声明,在main函数中引用时会报错—“无法识别的标识符”,因为main函数找不到playAviVideo函数在哪里。
3. 源文件-main.cpp
#include "head.h"
int main() {
//1.播放一个视频
playAviVideo();
//2.缩放视频后播放
playScaleVideo();
}
入口函数,引用自定义的head.h头文件,调用的playAviVideo和playScaleVideo函数在head.h中声明过,因此main函数可以找到其具体的函数定义。
4. 源文件-其他
以playAviVideo.cpp为例,在这个源文件中引用了head头文件,实现了head头文件中声明的int playAviVideo()函数定义,main函数执行时便可以到这个文件中找到playAviVideo函数的具体定义。
#include "head.h"
#include <iostream>
using namespace std;
int playAviVideo() {
cout << "playAviVideo"<<endl;
return 0;
}
Copyright © 2004-2024 Ynicp.com 版权所有 法律顾问:建纬(昆明)律师事务所 昆明市网翼通科技有限公司 滇ICP备08002592号-4