目录

  • 前言
  • 关于头文件路径的坑
  • 关于多文件编译的坑

前言

今日想学习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++ | 尝试攥写头文件遇到的坑相关推荐

  1. C++中的头文件和源文件:如何写头文件

    C++中的头文件和源文件 转自:博客园http://www.cnblogs.com/lidabo/archive/2012/04/17/2454568.html 一.C++编译模式 通常,在一个C++ ...

  2. 【c】写头文件要加#ifndef,#define, #endif

    头文件首位 编写.h时, 最好加上如下,用来防止重复包含头文件: 例如: 要编写头文件test.h 在头文件开头写上两行:#ifndef _TEST_H#define _TEST_H// 文件名的大写 ...

  3. VS2019中在源文件中如何使用自己写的头文件(保姆级教程)

    VS2019中在源文件中如何使用自己写的头文件 前言 开始教程 建立一个头文件 建立头文件对应的.cpp文件 在其余源文件中使用 可能出现的错误 前言 一个完整的头文件应该分为:.h文件与.cpp文件 ...

  4. C++中对于类来说头文件(.h)和源文件(.cpp)都应该写些什么 (类的常规创建)

      头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等,但一般来说不写出具体的实现. 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下 ...

  5. C++中头文件(.h)和源文件(.cpp)都应该写些什么

    原文出处:https://www.cnblogs.com/fenghuan/p/4794514.html 头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等, ...

  6. C++中头文件(.h)和源文件(.cpp)都应该写些什么,头文件中的预编译语句作用,命名空间和头文件的区别与联系,内部链接和外部链接

    1. C++中头文件(.h)和源文件(.cpp)都应该写些什么: 总结下来就是头文件写的就是类的声明(包括类里面的成员和方法的声明)和函数的声明,但一般来说不写出具体的实现.对应的同名(可以不同名,但 ...

  7. C语言中头文件怎么写?(本文来源网络,由黑乌鸦进一步完善)

    c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码.有利于整理思路.使代码脉络更加 ...

  8. C语言头文件互锁和包含问题

    正文 大家好,我是bug菌! 今天带来的主要内容是关于头文件的那些事,或许头文件并不是那么起眼,大部分人在编程中对头文件的组织并没有形成一定的设计思路,虽然使用了一些预编译在一定程度上能够减少重复包含 ...

  9. C++ 笔记(25)— 理解 C++ 中的头文件和源文件的作用

    1. C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件: .cpp 文件,被称作 C++ 源文件,里面放的都是 C++ 的源代码 .h 文件,被称作 C++ 头文件,里面放的也是 C++ ...

最新文章

  1. 高手速成android开源项目【blog篇】
  2. centos 7 安装tomcat
  3. VC读取注册表中二进制类型REG_BINARY的代码
  4. python操作系统接口错误_Python os模块和sys模块 操作系统的各种接口
  5. 分布式高性能消息处理中心HPMessageCenter
  6. 12个便于web设计及开发的在线工具
  7. 这份数十万人浏览,作为企业风向标的BI报告,你一定要看看
  8. 绘制直方图的方法大全
  9. java从入门到精髓 - IO输入输出
  10. 如何卸载 Adobe Creative Cloud 桌面应用程序
  11. 模板,宏,atuo关键字的简述
  12. 树莓派USB摄像头和motion实现网络监控
  13. 企业如何推动流程管理
  14. 李宏毅(机器学习)机器学习概述+线性回归案例分析
  15. 曾被诉“抄袭”,头条搜索想要突围有点难
  16. linux kernel 内存相关记录
  17. win10修改user文件夹名称
  18. 【英译中】如何拍好沙滩照1——2014年7月23日
  19. 迭代器以及如何获得迭代器地址
  20. 局域网内的计算机拒绝访问,win10系统局域网拒绝访问的解决方法

热门文章

  1. HTML基础知识点总结三
  2. easyUI分页中,如何实现页面跳转,再返回时,仍然到跳转前页数。(含页面显示条数)
  3. java课程设计之球球大作战
  4. 5-2. 已有的小车实现samba文件共享
  5. 计算机管理无法连接虚拟磁盘服务,win10系统电脑打开磁盘管理出现“无法连接虚拟磁盘服务”的教程...
  6. 如何修改图片的dpi?图片的dpi怎么调?
  7. 测绘界超强工具箱!CADCASS实用插件合集,各种功能应有尽有!断面、高程点、等高线、三角网、拓扑检查...
  8. 【LeetCode】一年中的第几天
  9. upc 7834 送礼物
  10. Java数组知识点概述