c++ | 尝试攥写头文件遇到的坑
目录
- 前言
- 关于头文件路径的坑
- 关于多文件编译的坑
前言
今日想学习c++项目的文件结构,顺便利用文件结构来复习数据结构,结果问题一个接一个,故记录下今天遇到的各种坑。
背景:vscode
文件结构:
关于头文件路径的坑
如果你用的ide是vscode,你会发现,在你建立一个新的项目的时候,会自动生成一个配置文件c_cpp_properties.json。而在这个配置文件中有一个配置名为includePath的配置文件。如果你以为把自定义头文件的路径添加到这个配置下就万事大吉,那你就大错特错了!程序将会报错:
正确的做法应该是在task.json配置文件中将"-I" 以及头文件的路径添加至"args"的参数中,如下的"${fileDirname}\Inc"路径:
"args": ["-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe","-I","${fileDirname}\\Inc"
]
具体原因还不知道,我目前的理解是,includePath是对自带的头文件的路径,用于检测语法错误与否。而报错提示是编译错误,没有像编译器传达头文件的搜索路径。欢迎指正与补充。
关于多文件编译的坑
c++支持多文件编译,所以头文件可以采用分离式编译的思想,即头文件只写声明,实现可以在另一个源文件中攥写。这种思想不难理解,但是要在vscode中实现就出现了坑!
解决了头文件路径问题,也许就不会提示找不到该头文件,但是还是会出现错误。首先如果你直接运行main.cpp(含有main()的源文件)会报错:
即报错提示方法未定义,(图中SqList在头文件中声明的类,其方法只声明未实现)而方法的实现是在其他源文件中攥写的,也就是说程序找不到源文件的路径。而我们的源文件是放在Src路径下的,说明没有更新配置文件,所以现在需要解决的时间变成寻找配置文件里相应的参数。
我们知道,源文件是需要编译的,所以找到配置文件中的编译目录,将Src添加至其中或许能解决问题。最后我发现task.json中的"args"的参数"-g"后面加上源文件路径即可。如下:
"args": ["-g","${file}","${fileDirname}\\Src\\*.cpp","-o","${fileDirname}\\${fileBasenameNoExtension}.exe","-I","${fileDirname}\\Inc"
]
c++ | 尝试攥写头文件遇到的坑相关推荐
- C++中的头文件和源文件:如何写头文件
C++中的头文件和源文件 转自:博客园http://www.cnblogs.com/lidabo/archive/2012/04/17/2454568.html 一.C++编译模式 通常,在一个C++ ...
- 【c】写头文件要加#ifndef,#define, #endif
头文件首位 编写.h时, 最好加上如下,用来防止重复包含头文件: 例如: 要编写头文件test.h 在头文件开头写上两行:#ifndef _TEST_H#define _TEST_H// 文件名的大写 ...
- VS2019中在源文件中如何使用自己写的头文件(保姆级教程)
VS2019中在源文件中如何使用自己写的头文件 前言 开始教程 建立一个头文件 建立头文件对应的.cpp文件 在其余源文件中使用 可能出现的错误 前言 一个完整的头文件应该分为:.h文件与.cpp文件 ...
- C++中对于类来说头文件(.h)和源文件(.cpp)都应该写些什么 (类的常规创建)
头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等,但一般来说不写出具体的实现. 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下 ...
- C++中头文件(.h)和源文件(.cpp)都应该写些什么
原文出处:https://www.cnblogs.com/fenghuan/p/4794514.html 头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等, ...
- C++中头文件(.h)和源文件(.cpp)都应该写些什么,头文件中的预编译语句作用,命名空间和头文件的区别与联系,内部链接和外部链接
1. C++中头文件(.h)和源文件(.cpp)都应该写些什么: 总结下来就是头文件写的就是类的声明(包括类里面的成员和方法的声明)和函数的声明,但一般来说不写出具体的实现.对应的同名(可以不同名,但 ...
- C语言中头文件怎么写?(本文来源网络,由黑乌鸦进一步完善)
c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码.有利于整理思路.使代码脉络更加 ...
- C语言头文件互锁和包含问题
正文 大家好,我是bug菌! 今天带来的主要内容是关于头文件的那些事,或许头文件并不是那么起眼,大部分人在编程中对头文件的组织并没有形成一定的设计思路,虽然使用了一些预编译在一定程度上能够减少重复包含 ...
- C++ 笔记(25)— 理解 C++ 中的头文件和源文件的作用
1. C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件: .cpp 文件,被称作 C++ 源文件,里面放的都是 C++ 的源代码 .h 文件,被称作 C++ 头文件,里面放的也是 C++ ...
最新文章
- 高手速成android开源项目【blog篇】
- centos 7 安装tomcat
- VC读取注册表中二进制类型REG_BINARY的代码
- python操作系统接口错误_Python os模块和sys模块 操作系统的各种接口
- 分布式高性能消息处理中心HPMessageCenter
- 12个便于web设计及开发的在线工具
- 这份数十万人浏览,作为企业风向标的BI报告,你一定要看看
- 绘制直方图的方法大全
- java从入门到精髓 - IO输入输出
- 如何卸载 Adobe Creative Cloud 桌面应用程序
- 模板,宏,atuo关键字的简述
- 树莓派USB摄像头和motion实现网络监控
- 企业如何推动流程管理
- 李宏毅(机器学习)机器学习概述+线性回归案例分析
- 曾被诉“抄袭”,头条搜索想要突围有点难
- linux kernel 内存相关记录
- win10修改user文件夹名称
- 【英译中】如何拍好沙滩照1——2014年7月23日
- 迭代器以及如何获得迭代器地址
- 局域网内的计算机拒绝访问,win10系统局域网拒绝访问的解决方法
热门文章
- HTML基础知识点总结三
- easyUI分页中,如何实现页面跳转,再返回时,仍然到跳转前页数。(含页面显示条数)
- java课程设计之球球大作战
- 5-2. 已有的小车实现samba文件共享
- 计算机管理无法连接虚拟磁盘服务,win10系统电脑打开磁盘管理出现“无法连接虚拟磁盘服务”的教程...
- 如何修改图片的dpi?图片的dpi怎么调?
- 测绘界超强工具箱!CADCASS实用插件合集,各种功能应有尽有!断面、高程点、等高线、三角网、拓扑检查...
- 【LeetCode】一年中的第几天
- upc 7834 送礼物
- Java数组知识点概述