c – 添加一个包含保护会破坏构建
作者:互联网
我将#ifndef ..#define ..#endif添加到我项目的文件中,编译器失败了.一旦我删除它或在定义中添加任何其他名称它编译好.可能是什么问题呢?
听起来像文件已经声明,但我不知道在哪里.我很好,只是删除它,但我真的想知道为什么会发生这种情况.
error: expected class-name before ‘{’ token
error: ‘QDesignerFormEditorInterface’ has not been declared
还有其他一些错误.
我实际上是在使用Qt的一个例子,“Custom Widget Plugin Example”.
不同之处在于我使用自己的类作为自定义小部件(.h,.cpp和.ui文件).
它可能与包含2的文件有关,尽管这就是示例的实现方式.
解决方法:
这个宏用作include guard吗?如果是这样,听起来你复制了其他地方使用的名称.当人们不考虑包含守卫必须具有的范围时,这是一个常见问题 – 您应该在其中包含比文件名更多的信息.
包括警卫目标:
>创建标题时生成一次
>再也不用考虑了
>重复的机会少于你赢得彩票的机会
错误包括警卫名称(对于文件“config.h”):
> CONFIG_H
>太笼统了
> _CONFIG_H,CONFIG__H,CONFIG_H __,__ CONFIG_H__等
>所有reserved,仍然太一般
> PROJECT_CONFIG_H
>更好,更不可能在不相关的项目中复制
>但仍然没有路径信息,很容易在大型项目中复制
好包含防护名称(对于文件“config.h”):
> PATE_20091116_142045
>那是<姓氏> _< date> _< time>
>甚至不需要项目,路径,文件名信息
>易于打字
>如果您的编辑器具有插入日期功能,您可以非常快速地“键入”它
>易于生成
>生成时包含序列号,如果需要每秒生成多个序列号
>具有普遍独特性的有力保证
> INCLUDE_GUARD_726F6B522BAA40A0B7F73C380AD37E6B
>从实际UUID生成
>具有普遍独特性的有力保证
>如果它出乎意料地出现,“INCLUDE_GUARD”是一个很好的暗示它是什么,同时服务于将它放在一个单独的命名空间(虽然按惯例而不是语言识别)
>如果需要,可以预先添加项目名称(这通常是宏的项目指南所要求的)
>轻松编写自己的sample program来生成
标签:include-guards,c,compiler-errors,macros,header 来源: https://codeday.me/bug/20190926/1818523.html