前言:

博主最近刚从VS Code转到VS 2022,但发现自定义的方法和VS Code有些不同,故出一期VS 2022自定义头文件的博客,时间仓促,请不吝赐教

如何联系我?wei.haoran@outlook.com

正文:

参考资料:Microsoft C++、C 和汇编程序文档

以"lnode.h"为例,您需要保证在头文件和源文件内均创建名为"lnode"的头文件和源文件;

lnode.h示例:

#pragma once
#include <iostream>
#include <vector>const int MaxSize = 1e3 + 10;
typedef int ElemType;typedef struct LNode
{ElemType data;struct LNode* next;
} LNode;void CreateLNodeRear(LNode*& L, ElemType a[], int n);
void InitLNode(LNode*& L);
void DestroyLNode(LNode*& L);
bool IfEmpty(LNode* L);
int LNodeLen(LNode* L);
void DisplayLNode(LNode* L);
bool GetElem(LNode* L, int i, ElemType& e);
int LocateElem(LNode* L, ElemType e);
bool InsertLNode(LNode*& L, int i, ElemType e);
bool DeleteLNode(LNode*& L, int i, ElemType& e);

显然,函数的声明,类的定义,结构体的定义都写在头文件内;

注意,using namespace std 最好不要写在头文件内。

推荐阅读:[C++] 头文件中不要用using namespace std

lnode.cpp示例:

#include <iostream>
#include <vector>
#include"lnode.h"using namespace std;
void CreateLNodeRear(LNode*& L, ElemType a[], int n)
{LNode* s, * rear;L = (LNode*)malloc(sizeof(LNode));rear = L;for (int i = 0; i < n; i++){s = (LNode*)malloc(sizeof(LNode));s->data = a[i];rear->next = s;rear = s;}rear->next = NULL;
}void InitLNode(LNode*& L)
{L = (LNode*)malloc(sizeof(LNode));L->next = NULL;
}void DestroyLNode(LNode*& L)
{LNode* pre = L, * p = L->next;while (p != NULL){free(pre);pre = p;p = pre->next;}free(pre);
}bool IfEmpty(LNode* L)
{return (L->next == NULL);
}int LNodeLen(LNode* L)
{LNode* p = L->next;int cnt = 0;while (p != NULL){cnt++;p = p->next;}return cnt;
}void DisplayLNode(LNode* L)
{LNode* p = L->next;while (p != NULL){cout << p->data << " ";p = p->next;}cout << endl;
}bool GetElem(LNode* L, int i, ElemType& e)
{LNode* s = L; // s指向头结点,j置0;int j = 0;if (i <= 0)return false;while (j < i && s != NULL){j++;s = s->next;}if (s == NULL)return false;else{e = s->data;return true;}
}int LocateElem(LNode* L, ElemType e)
{LNode* s = L->next;int j = 1; //数据结点指向首结点,j置为1(表明此时位置指向1)while (s != NULL && s->data != e){s = s->next;j++;}if (s == NULL)return (0);else{return (j);}
}bool InsertLNode(LNode*& L, int i, ElemType e)
{LNode* p = L, * s;int j = 0;if (i <= 0)return false;while (j < i - 1 && p != NULL){j++;p = p->next;}if (p == NULL)return false;else{s = (LNode*)malloc(sizeof(LNode));s->data = e;s->next = p->next;p->next = s;return true;}
}bool DeleteLNode(LNode*& L, int i, ElemType& e)
{LNode* p = L, * q;int j = 0;if (i <= 0)return false;while (j < i - 1 && p != NULL){j++;p = p->next;}if (p == NULL)return false;else{q = p->next;if (q == NULL)return false;e = q->data;p->next = p->next->next;free(q);return true;}
}

显然,lnode.cpp内仅包含函数的实现过程,using namespace std 和头文件;

注意,lnode.cpp内一定要包含:

#include"lnode.h"

main.cpp示例:

#include<iostream>
#include<vector>
#include"lnode.h"using namespace std;int main()
{LNode* L = nullptr;
h1:cout << "1.CreateLNodeRear;2.InitLNode;3.DestroyLNode;4.IfEmpty;5.DisplayLNode;" << endl;cout << "6.GetElem;7.LocateElem;8.InsertLNode;9.DeleteLNode;10.LNodeLen" << endl;int flag = 0;cin >> flag;if (flag == 1){ElemType num;vector<ElemType> array;cout << "请输入待输入数组array,空格间隔,回车结束" << endl;while (1){cin >> num;array.push_back(num);if (cin.get() == '\n')break;}int len = array.size();int a[MaxSize];for (int i = 0; i < len; i++)a[i] = array[i];CreateLNodeRear(L, a, len);}else if (flag == 2){InitLNode(L);}else if (flag == 3){DestroyLNode(L);}else if (flag == 4){if (IfEmpty(L))cout << "Empty" << endl;elsecout << "Not Empty" << endl;}else if (flag == 5){DisplayLNode(L);}else if (flag == 6){int i = 0, e = 0;cout << "请输入i的值" << endl;cin >> i;if (GetElem(L, i, e))cout << e << endl;elsecout << "error!" << endl;}else if (flag == 7){int e;cout << "请输入待查找的e" << endl;cin >> e;if (LocateElem(L, e) == 0)cout << "error!" << endl;elsecout << LocateElem(L, e) << endl;}else if (flag == 8){int i = 0, e = 0;cout << "请输入i的值" << endl;cin >> i;cout << "请输入e的值" << endl;cin >> e;InsertLNode(L, i, e);}else if (flag == 9){int i = 0, e = 0;cout << "请输入i的值" << endl;cin >> i;if (!DeleteLNode(L, i, e))cout << "error!" << endl;elsecout << "Finished." << endl;}else if (flag == 10){cout << LNodeLen(L) << endl;}else{cout << "未识别指令" << endl;}cout << "是否继续?Y/N" << endl;char c;cin >> c;if (c == 'Y')goto h1;elsereturn 0;
}

显然,main.cpp内亦要包含:

#include"lnode.h"

可以把”lnode.h“想成从main.cpp函数中提取的一部分,而将lnode.cpp想象成函数的实现部分。

VS 2022 C++ 自定义头文件示例相关推荐

  1. Visual Studio 2022 自定义头文件源文件切换快捷键

    Visual Studio 2022 自定义头文件源文件切换快捷键 修改步骤 注意事项 修改步骤 废话不多说,直接上流程. (1)工具 -> 选项 -> 环境 -> 键盘 -> ...

  2. gcc编译自定义头文件

    2019独角兽企业重金招聘Python工程师标准>>> C中外部函数实例 内部函数:static声明,只对本文件域生效,外部不可引用 外部函数,使用extern声明,默认可以去掉,在 ...

  3. C语言中include““与include<>的区别(自定义头文件、预设头文件)

    文章目录 新建控制台应用程序 自定义头文件 编辑头文件 工程内引用头文件,调用函数 标准库头文件,调用函数 新建控制台应用程序 Win32 Application和Win32 Console Appl ...

  4. C语言如何自定义头文件——一看就废!!!

    为什么要自定义头文件? 如果在一个文件中,写上成百上千行的代码,那么这些代码让人阅读起来是真的烦.因此,我们可以引入头文件,把自己写的函数放入头文件中,然后直接调用到主程序中,这样在主程序中看起来就比 ...

  5. 在QT中自定义头文件和源文件的使用方法

    在QT中自定义头文件和源文件的使用方法 最近想用QT来实现一个简单的功能,为了便于函数的集成需要将功能函数进行封装,自己补了些c++的函数封装方法,发现在QT中还不太一样.接来下简单介绍一下具体怎么实 ...

  6. c++包含自定义头文件

    在c++中自定义的库通过源码复用的方式在其他项目中使用,需要添加相应的头文件,有以下几种方式在其他项目中包含自定义的头文件: 将自定义库的头文件(.h)与源文件(.cpp)复制到当前项目文件夹下,然后 ...

  7. DevC++如何安装自定义头文件并使用

    首先我们打开DevC++,然后点击新建. 新建一个控制台应用程序 取一个喜欢的文件名. 然后会出现如下界面. 点击新建单元 将头文件源码放入 找到空白位置,右键,然后点关闭并保存 保存的文件名要为头文 ...

  8. 自定义头文件 No such file or directory

    my_file.h为你的头文件名 要用#include"my_file.h",而不能是#include<my_file.h>. 如果头文件名在尖括号<>里, ...

  9. 第二篇:浅谈自定义头文件可能导致的重定义问题

    前言 总看到一些地方说定义语句别放在头文件中,因为会引起重定义.但具体编程中,却发现有些定义又不得不放在头文件中. 这可如何是好?基于对这个问题的思考,有了这篇随笔. 重定义产生的情况 情况一:多个源 ...

最新文章

  1. UI培训教程分享:常用的商业插画风格有哪些?
  2. python爬虫项目-33个Python爬虫项目实战(推荐)
  3. Java 分页,两种方式的分页,即取即用的代码,不客气
  4. Python教程:Sys 与 Import 模块
  5. 【CentOS】EOF使用
  6. 字符指针+结构体排序(后缀子串排序)
  7. eclipse新发现功能之dos和terminal(ssh连接)
  8. 各大媒体优劣对比_信息流投放广告丨各大平台的信息流都有什么特点与弊端
  9. updateStateByKey算子入门案例
  10. 【手指识别】基于matlab GUI指尖图像采集与检测【含Matlab源码 585期】
  11. M1 和 Docker 谈了个恋爱
  12. 墨门云文件加密系统有哪些功能特点?
  13. 计算机基础多媒体硬件,计算机基础:多媒体基础知识笔记
  14. 在电脑中安装群辉NAS
  15. python悬浮球窗口_实现悬浮窗口
  16. 手游运营,怎么做一份数据日报?
  17. 项目管理中的边边角角 之三
  18. STM32系列(HAL库)——F103C8T6使用SPI方式点亮OLED
  19. CANoe 从入门到精通
  20. WebKit介绍及总结(二)

热门文章

  1. pe卸载win10更新补丁_win10补丁,小编告诉你如何卸载Win10上已安装的更新补丁
  2. 欧拉图与半欧拉图的判断
  3. Java论坛系统--3.系统用户角色权限表结构设计
  4. Python爬虫(2.网络爬虫的实现原理及技术)
  5. 用计算机画有常数的函数图像,信息技术应用 用计算机画函数图象教学实录
  6. MinIO入门-02 SpringBoot 整合MinIO并实现文件上传
  7. Pip/python-如何查看已安装的包有哪些版本?如何查看某个包存在哪些版本?pip list-pip freeze-pip show package
  8. Internet Download Manager 6.37.15简体中文版
  9. 文档模式:标准模式、混杂模式
  10. 设计原则:里式替换原则(LSP)