Arduino库中包含文件的冲突
Conflict of include files from an Arduino library
我正在编写Arduino库,文件夹结构如下:
libraries
+Foo
-Foo.h
-Helper.h
+Bar
-Bar.h
-Helper.h
+Helper
-Helper.h
Foo和Bar是我创建的库。将Helper.h放在他们的文件夹中的原因是,最终用户将更容易地让库工作。此外,某些库只能通过编辑其源代码来进行配置。
然而,如果我在我的草图中写#include <Helper.h>
,就无法控制我包含的是哪个"Helper.h"。
有没有办法将Helper.h
从Foo
隐藏起来,将Bar
从草图隐藏起来?
显而易见的答案是:不要写#include <Helper.h>
。你的文件不是实现的一部分,应该包括在内使用CCD_ 6。如果你这样做,首先编译器将在目录中查找包含文件包含包含它的文件:如果包含它从Foo/Foo.h
,编译器将拾取Foo/Helper.h
;如果包括则编译器将从Bar/Bar.h
中获取Bar/Helper'
等等。
客户端代码应该只设置根的include路径像#include "Foo/Foo.h"
;如果必要,他们也可以执行CCD_ 12。
你必须做的一件事就是确保所有收割台防护装置的唯一性。如果这是应用程序,通常只要破坏路径就足够了进入包含保护,例如使用Foo_Helper_h
,而不是仅Foo_h
。或者(我会把它用于任何图书馆第三方应该使用的(,生成一些随机字符串include guard。(如果我打开一个名为abc.h
的文件不存在,我的编辑器自动生成以下内容样板:
/********************************************************/
/* File: abc.h */
/* Author: J. Kanze */
/* Date: 02/05/2013 */
/* ---------------------------------------------------- */
#ifndef abc_h_20130502O481MBxFZeAzz4dgIb7iC4Q9
#define abc_h_20130502O481MBxFZeAzz4dgIb7iC4Q9
#endif
可以肯定的是,这里的保安永远不会发生冲突与任何其他。(你必须沿着这些路线做点什么无论如何,为了在文件中获得您的版权信息。(
刚刚找到了一种似乎可以解决问题的方法:
libraries
+Foo
-Foo.h
+extra
-Helper.h
+Bar
-Bar.h
+extra
-Helper.h
+Helper
-Helper.h
这样,Foo
和Bar
中的Helper.h
对客户端是不可见的,并且我可以分别在Foo
和Bar
中写入#include "extra/Helper.h"
以包括所需的文件。
- 从二进制文件中读取元素时引发异常(引发异常:读取访问冲突. _Pnext 0xB414D4)
- 使用 Win32 读取文件时,glShaderSource 访问冲突
- 包括两个文件 C++ 之间的冲突
- 尝试将 std::cerr 重定向到文件时出现访问冲突异常
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 挂钩创建文件抛出异常:读取访问冲突
- 从文件读取时读取访问冲突
- 如何解决头文件中的变量冲突?
- 错误:多个文件中的结构声明冲突
- C++ h 和 cpp 文件中的指针声明冲突
- 为什么在2.CPP文件中包含此头文件(带头保护)会导致命名冲突
- 在访问冲突时创建转储文件
- C++:使用std::ifstream读取二进制文件后删除缓冲区/指针时发生访问冲突
- 简单Boost文件系统访问冲突
- OpenGL重新定义错误与Windows SDK文件相冲突时
- 当第 4 个(可选)参数为 NULL 时,写入文件将引发访问冲突
- 我创建锁定文件的功能导致访问冲突
- std::getline() 访问冲突,以前可以工作,但现在无法从任何文件中读取
- VLCKit 与 iOS 项目中的 .mm 文件冲突
- 包括文件冲突解决方案