Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Arduino库中包含文件的冲突_C++_Arduino - Fatal编程技术网

C++ Arduino库中包含文件的冲突

C++ Arduino库中包含文件的冲突,c++,arduino,C++,Arduino,我正在编写Arduino库,其文件夹结构如下: libraries +Foo -Foo.h -Helper.h +Bar -Bar.h -Helper.h +Helper -Helper.h Foo和Bar是我创建的库。将Helper.h放在文件夹中的原因是,最终用户将更容易让库工作。此外,某些库只能通过编辑其源代码进行配置 但是,如果我在my中编写#include,就不可能控制包含哪个“Helper.h” 有没有办法从草图

我正在编写Arduino库,其文件夹结构如下:

libraries   
  +Foo
    -Foo.h
    -Helper.h   
  +Bar
    -Bar.h
    -Helper.h   
  +Helper
    -Helper.h
Foo和Bar是我创建的库。将Helper.h放在文件夹中的原因是,最终用户将更容易让库工作。此外,某些库只能通过编辑其源代码进行配置

但是,如果我在my中编写
#include
,就不可能控制包含哪个“Helper.h”


有没有办法从草图中隐藏
Helper.h
Bar

显而易见的答案是:不要写
#包括
。你的
文件不是实现的一部分,应该包括在内
使用
#包括“Helper.h”
。如果你这样做,首先 编译器将查找目录中的包含文件 包含包含它的文件:如果包含它 从
Foo/Foo.h
,编译器将选择
Foo/Helper.h
;如果包括 从
Bar/Bar.h
,编译器将拾取
Bar/Helper'
和 等等

客户端代码应该只设置根目录的include路径,并且 类似于
#的内容包括“Foo/Foo.h”
;如有需要,他们也可以 是否包含“Foo/Helper.h”

对于这一策略,你必须做的一件事是确保 所有头部防护装置的唯一性。如果这是一个 在应用程序中,通常足以损坏路径 进入防护罩,例如,使用
Foo\u Helper\u h
,而不仅仅是
Foo_h
。或者(我会将此用于任何库) 哪些第三方应使用),为其生成一些随机字符串 包括警卫。(如果我打开一个名为
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
将对客户端不可见,我可以编写
#包括“extra/Helper.h”
分别在
Foo
Bar
中添加所需文件。

是的,不要将
Foo
Bar
Helper
添加到include路径,并包括
Foo/Helper.h
Bar/Helper.h
。或者想出比
Helper.h
更好的名称>只是一个占位符名称,你可以把它想象成
Fat16.h
或类似的东西。你能再详细解释一下并把它变成一个答案吗?这里有点难理解。