C++ 解决文件重复包含】的更多相关文章

// 如果zzz没有定义就定义zzz,然后执行下面的代码,定义了就不执行 #if !defined(zzz) #define zzz struct PPoint { int x; int y; }; #endif…
C/C++避免头文件重复包含的方法 1. #ifndef 2. #pragma once 3. 混合使用 在实际的编程过程中,因为会使用多个文件,所以在文件中不可避免的要引入一些头文件,这样就可能会出现一个头文件被 include 多次,在C/C++中有几种不同的方式可以解决这个问题,总体功能相差不大,但依然存在细微差别. 1. #ifndef 格式如下: #ifndef __COMPLEX__ #define __COMPLEX__ //头文件主体 #endif 或者 #ifndef __CO…
c++ 头文件包含 原因的分析:   c++  头文件的循环引用是指: .h 里面的里面的头文件的相互包含的,引起的重复引用的问题.cpp 里面包含头文件是不存在重复引用的问题(因为CPP没有#ifndef #define #endif 这个). 关键的原因是:#ifndef #define #endif 引起的.  翻译一下就是  如果没有定义 包含, 如果定义了 就不包含了. 由于 宏是全局唯一的,所以只会包含一次.这就是引起重复包含的原因.这些问题的解决办法:http://my.oschi…
为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式.在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别. 不同的地方 // 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 声明.定义语句 #endif //方式二: #pragma once ... ... // 声明.定义语句 #ifndef的方式受C/C++语…
引用自:https://blog.csdn.net/xhfight/article/details/51550446 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式.在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别. (一) #ifndef的方式受C/C++语言标准支持 优点: (1) 不光可以保证同一个文件不被包含多次,也能保证内容完全相同的两个文件(或者代码片段)不被同时包含.…
为了避免同一个头文件被多重包含/重复包含,有两种方式: 方式一: #ifndef XXX #define XXX ... ...  //声明语句 #endif  //XXX 方式二: #pragma once ... ...//声明语句 在能够支持这两种方式的编译器上面,两者没有太大区别,但任存在一些细微差别. 方式一---依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含. 缺点:缺点就是如果不同头文件的宏名不小心“撞车”,可能就会…
第一个问题:编译时重定义 文件1.h void fun1(); struct A { int a char b; };   文件2.h #include"1.h" struct B { struct A; int a; }; void fun2();   文件1.cpp #include"1.h" #include"stdio.h" void fun1() { printf("fun1 is called\n"); } 文件2…
当一个项目比较大时,往往都是分文件,这时候有可能不小心把同一个头文件 include 多次,或者头文件嵌套包含. 方法一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ // 声明语句 #endif 方法二: #pragma once // 声明语句…
一.重复包含头文件 头文件重复包含,可能会导致的错误包括:变量重定义,类型重定义及其他一些莫名其妙的错误.C++提供两种解决方案,分别是#ifndef和#pragma once #ifndef _SOME_FILE_H_ #pragma once #define _SOME_FILE_H_ ...//一些声明语句 ...//一些声明语句 #endif 第一种方式:通过这种预处理实现唯一检查.预处理首先测试_SOME_FILE_H_变量是否未定义,如果_SOME_FILE_H_未定义,那么#ifn…
一.类嵌套的疑问 C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题.假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的: class B; class A { public: B b; }; class B { public: A a; }; 因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的.在这里我们只需要把其中的一…
今天再看二叉树的知识,看着看着就看到C/C++的头文件及头文件重复定义这一块去了.以前就看到过这个问题,但是自己一直没有用到这方面的东西,今天遇到就顺便总结一下,等以后忘了再回来看看. 首先明确一点C/C++头文件是要来干什么的?(http://baike.baidu.com/link?url=lMbCZqCAsBJ_rhifA82koGGjoJmbZUy1tTPNPzertEc7nxNr71Xqfm63GEuqA8Ze) 头文件的作用有三: 1.C\C++采用源文件单独编译为object文件,…
.h头文件存在的意义就是封装,可以方便多个.c源文件使用,但要防止.h头文件被同一个.c源文件多次包含. 例如, io.h文件 #ifndef _IO_H_ #define _IO_H_ #define HOLENUM 15 int HoleTemp; void Get_Temp(unsigned char HoleID); #endif uart.h文件 #ifndef _UART_H_ #define _UART_H_ #include <io.h> #endif main.c文件 #in…
1. 第一个问题:时间少了8小时 Log4j 输出的日志中,时间比系统时间少了8小时,但是 eclipse 控制台输出的日志的时间却是对的. log4j配置如下: #all logger output level is 'ERROR' and output position is stdout #so only write our project's DEBUG log and ERROR log of the others log4j.rootLogger=ERROR, stdout, R #…
引子----之前写C++ 时遇到的坑 之前由于Java实在太好用了,C++的工程代码几乎没怎么碰,真的写起来的时候总会有些小bug,这里就对其中的一个进行个总结 a.h #include "b.h" class a{ public: a(); ~a(); } a.cpp #incldue "a.h" a::a(){ .... }; a::~a(){ .... }; b.h #include "a.h" class b{ public: b();…
转自:http://blog.csdn.net/hazir/article/details/38600419 今天下午遇到一个头文件相互包含而导致的编译问题,花了我不少时间去调试没找到问题,最后晚上跟师兄讨论不少时间,突然有所顿悟! 问题重现 我把问题脱离于项目简单描述一下:我写了一个函数 bool func(ClassA* CA) 需要加到项目中,我就把这个函数的声明放到 head1.h 中,函数参数类型 ClassA 定义在另一个头文件 head2.h 中,因此我需要在 head1.h 中包…
fatal error LNK1179: invalid or corrupt file: duplicate comdat  "XXX" LNK1179 无效或损坏的文件: 重复的 COMDAT“_IID_IDispatchEx” 解决方法,找到(ocx和dll都是类似的) #import "Flash.ocx"  named_guids 改为 #import "Flash.ocx"  named_guids, exclude("IF…
C 文件直接包含 有一部分代码很大,在很多函数中重复,可以直接写在另外的一个文件中,引用时直接包含.co.cpp两个函数都 包含c1.cxx. 点击(此处)折叠或打开 ////// co.cpp #include <stdio.h> #include <stdlib.h> void f1(int i){ int a; #include "c1.cxx" a=i; printf("[%d][%s][%s] a=%d\n",__LINE__, _…
关于循环嵌套使用for循环的空格问题 原创不易,转载请注明 需求: 现有两个功文件,需要将文件拼接 [root@localhost ~]# cat name 111 222 223 333 444 555 556 666 777 888 999 990 [root@localhost ~]# Parameter aaa bbb ccc ddd eee fff ggg 需要将将name和Parameter两个文件拼凑成"111_aaa"."111_bbb"的样式,将n…
DL服务器主机环境配置(ubuntu14.04+GTX1080+cuda8.0)解决桌面重复登录 前面部分是自己的记录,后面方案部分是成功安装驱动+桌面的正解 问题的开始在于:登录不了桌面,停留在重复输入密码界面 博文中分析的结论: 虚拟机中不能直接调用物理显卡进行 CUDA 编程:虚拟机中运行 CUDA 需要硬件和软件的配合才能使用,对于一般使用者可能暂时不太可能的. 参考博文: 深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0 深度学习主机环境配…
解决 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片) 1.当我们写了一个Python的项目时,特别是一个GUI项目,我们特备希望它能成为一个在Windows系统可执行的EXE文件,那么今天就来讲一下我是如何将我的GUI项目打包成一个EXE文件的你吧,其中有一些坑和遇到了一些错误,希望能给大家带来一定的帮助. 2.我们使用的是Python的一个第三方包进行打包的,这里使用的是pyinstaller包,我们可以直接使用pip install pyinstaller进行安装,因为…
操作系统:Windows 10 X64 企业版 Qt: 5.8.0 QtCreater: 4.2.1 刚刚开始学习Qt,不断遇到困难和挑战,前几天在各个QQ群里询问如何在Qt的资源文件中包含和释放exe可执行文件,结果没有谁给我一个准确的答复!!!! Qt做为开发了这么多年的跨平台GUI开发解决方案,我相信这应该不是问题,只是我不了解Qt而已!在网上搜索,绝大多数的关于Qt资源文件的文章,基本上都是照抄Qt的官方说明而已,并没有提到我说的问题!!!经过努力,终于解决了!!!下面我将详细说明如何做…
uploader = WebUploader.create({ swf: 'resources/js/webuploader-0.1.5/Uploader.swf', // 文件接收服务端. server: settings.url, // 选择文件的按钮.可选. // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick : '#picker', // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! resize : false }); 以上代码是…
大型网站技术架构(四)--核心架构要素   作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载.此篇已收录至<大型网站技术架构:核心原理与案例分析>读书笔记系列,点击访问该目录获取完整内容. 前言 所谓架构,一种通俗的说法就是“最高层次的规划,难以改变的决定”,这些规划和决定奠定了事物未来发展的方向和最终的蓝图. 而软件架构即“有关软件整体结构与组件的抽象描述,用于指导大型软件系统各方面的设计”. 一般来说软件架构需要关…
前置:https://www.cnblogs.com/luocodes/p/11827850.html 解决最后一个问题,如何将scrapy真正的打包成单文件 耗了一晚上时间,今天突然有灵感了 错误分析 不将scrapy.cfg文件与可执行文件放一起,那么就会报错---爬虫没有找到 报错的原因 1.scrapy.cfg文件放入不进可执行文件中 2.scrapy目录读取不到scrapy.cfg文件 问题1 pyinstaller是将可执行文件解压到系统的临时文件中,在进行运行的 所以我们只需要在可…
虽然我希望.NET PDB文件与本地PDB文件处理方式相同,但我们在这件事上没有任何选择,因为事情就是这样.我相信微软的调试器团队多年来听到过很多类似帕特里克的评论.也许我们会在未来的Visual Studio版本中看到所有问题都得到解决. 帕特里克非常幸运能够通过VPN远程调试到客户机器中.我相信你们大多数读者都会喜欢这样的场景!对于我们大多数人来说,只要让用户/管理员打开日志并将输出发送给我们,就和登月旅行一样困难. 本机二进制PDB文件非常敏感.正如我在关于PDB文件的原始文章中指出的,本…
编写一个java源文件时,该源文件又称为编译单元.一个java文件可以包含多个类,但至多包含一个公共类,作为编译时该java文件的公用接口,公共类的名字和源文件的名字要相同,源文件名字的格式为[公共类名.java]. 当同一个源文件中包含两个public class时,JVM会立马报出错误   但java文件中可以不包含任何public公共类,但编译时JVM仍将与源文件名相同的类作为默认的接口.即便其他的类提供了main方法,JVM仍然无法编译. 当且仅当默认为接口的类中包含main方法时才能进…
PHP 获取指定目录下所有文件(包含子目录) //glob — 寻找与模式匹配的文件路径 $filter_dir = array('CVS', 'templates_c', 'log', 'img', 'config', 'css', 'js'); function get_file_list($dir) { global $filter_dir; $file_list = array(); $file_dir_list = array(); $dir_list = scandir($dir);…
导入eclipse工程到intellij里面, 然后出现各种错误, xxx.R文件重复, 各种资源id在R文件中找不到, 后来发现是intellij默认将整个项目以及gen文件夹作为源代码目录了, 在模块设置里面将他们取消, 只保留src作为源代码目录即可…
查看ubuntu文件目录的大小和文件夹包含的文件数 查看linux文件目录的大小和文件夹包含的文件数 统计总数大小 du -sh xmldb/ du -sm * | sort -n //统计当前目录大小 并安大小 排序 du -sk * | sort -n du -sk * | grep guojf //看一个人的大小 du -m | cut -d "/" -f 2 //看第二个/ 字符前的文字 查看此文件夹有多少文件 /*/*/* 有多少文件 du xmldb/ du xmldb/*…
准备工作: 在vs工具栏中找到NuGet   下载DotNetZip   现在就可以使用DotNetZip强大的类库了,在这里我给出一些简单的使用. ? 1 2 3 4 5 6 7 8 9 10 11 public ActionResult Export()     {       using (ZipFile zip = new ZipFile(System.Text.Encoding.Default))       {         zip.AddFile(Server.MapPath("…