一. 问题

为什么不把#include xx.generated.h放最后会导致error "the .generated.h file should always be the last #include in a header"

二. 求助

三. 分析

大佬简短凝练的回答道:因为好识别!
不是其他奇奇怪怪的原因

然后我们想一下,识别 这个词,谁识别,识别谁,为什么会好识别?识别后来做啥?结合其包含的反射机制,可以引出很深的话题,这里不做探讨。

四. 总结

为了反射机制运行的方便。

五. 新的认识

UE的反射机制是根据宏生成对应的代码。
既然是C++,那么生成的代码自然是.h.cpp的组合。假设我们为类A生成了A.generated.h和A.generated.cpp(UE命名习惯)。如果类A的宏标记生成的代码想跟A.generated.h里我们生成的代码来个里应外合的话,此时A.h一般都需要include"A.generated.h"。
另一方面,用户对背后的代码生成应该是保持最小惊讶的,用户写下了A.h,他在使用的时候自然也会想include “A.h”,所以这个时候我们的A.generated.h就得找个方式一起安插进来,最方便的方式莫过于直接让“A.h” include “A.generated.h”了。那既然每个需要分析的文件最后都会include这么一个*.generated.h,那自然就可以把它本身就当作一种标记了。
UE目前的方案是每个要分析的文件加上该include并且规定只能当作最后一个include,放最后也是因为他担心会有各种宏定义顺序产生的问题。

UE-c++ className.generated.h报错:generated header must be included last in a list of includes相关推荐

  1. OBS---环境配置之#include D3DX10.h报错

    一.先贴错误 因为这个笔记主要记录我如何整好这个OBS源码环境的,给需要的童鞋一个参考 1.1.#include <D3DX10.h>  报错 没有这个 解决方案:把2,3先解决了就水到渠 ...

  2. VS2017中预编译头的作用(删除pch.h报错的原因)

    刚使用VS2017的时候新建的项目的pch.h文件搞得一头雾水,点进去看了这个文件,发现里面什么内容都没有,但是把他删除之后就会报错说没有添加pch.h文件.百度了一下,发现这个是VS2017新加的一 ...

  3. opencv findContours 报错_acrt_first_block == header

    报错_acrt_first_block == header 之前一直使用OpenCV3.3+VS2015 void AOIAlgorithm::findUnits(Mat& blkGray, ...

  4. openGL包含gl.h/glu.h/glaux.h/glut.h/报错

    前言 目前现在openGL流行的库是glfw.glew.freetype基本上就能实现一般图形图像渲染,但是我们经常会看到openGL的一些老代码,经常包含gl.h/glu.h/glaux.h/glu ...

  5. ros/ros.h 报错找不到文件

    1.在工作空间下,右键新建文件,创建cpp文件. 2.更改CMakeLists.txt文件,demo01_pub.cpp为我的文件名. ctrl+shift+b编译,界面上端出现搜索框提示,选择:ca ...

  6. rpm安装mysql报错NOKEY_rpm包安装报错: Header V3 RSASHA256 Signature, key ID fd431d51 NOKEY

    报错信息:Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY 一.问题场景 RHEL 6.5 安装MySQL-5.5.44 首先,卸载rpm ...

  7. Linux安装mysql报错:Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY

    报错信息: Install  3 Packages (+2 Dependent packages) Total size: 209 M Is this ok [y/d/N]: y Downloadin ...

  8. jdk 11及以上 javax.annotation.Generated报错 @Generated报错

    jdk11及其以上移除了该包,可以使用jar替代 <dependency><groupId>javax.annotation</groupId><artifa ...

  9. 碰到 stdafx.h报错

    编译时报错: fatal error C1189: #error : Your version of the Windows SDK is earlier than 6.0. Try setting ...

最新文章

  1. Asp.net控件开发学习笔记(三)-控件开发基础
  2. Chromium之各国语言切换
  3. 【线段树合并】解题报告:luogu P4556雨天的尾巴 (树上对点差分 + 动态开点 + 线段树合并)线段树合并模板离线/在线详解
  4. 【数理逻辑】谓词逻辑 ( 谓词逻辑基本等值式 | 消除量词等值式 | 量词否定等值式 | 量词辖域收缩扩张等值式 | 量词分配等值式 )
  5. Boost:异步操作,涉及重新打包多个操作,但选择仅调用其中一个的测试程序
  6. python秒杀商品 多线程_Python——多线程
  7. Xamarin.Forms 5.0 项目实战发布!
  8. Python3只出现一次数字
  9. 设置目录_[LaTeX 尝试] titletoc - 为算法目录、定理目录等设置子目录
  10. 【分享】一套非常简单的企业即时通讯
  11. 【例题+习题】【数值计算方法复习】【湘潭大学】(一)
  12. 案例:按照JSP Model2思想实现用户注册功能
  13. android开发工具哪个好_小程序开发工具怎么用?哪个好用?
  14. 使用mybatis插入数据(insert)时返回主键的问题
  15. springmvc工作流程_springMVC工作原理及流程详细讲解
  16. LeetCode OJ - Construct Binary Tree from Preorder and Inorder Traversal
  17. 如何知道是哪个进程造成死锁?如何把这个进程杀掉?
  18. ServletContextListener 的应用
  19. Stata初步处理CFPS数据(merge)
  20. 三丰三坐标编程基本步骤_smt工程师总结smt贴片机编程步骤

热门文章

  1. ContentProvider使用
  2. 妙春浆:将肠内革命进行到底
  3. TFT-LCD屏幕显示ASCII字符和字符串
  4. 计算机组成原理一(考研)
  5. 这款DNA机器人,可以帮你分拣身体中的生物垃圾
  6. LeetCode 297 Serialize and Deserialize Binary Tree
  7. 模拟电子技术-功率放大电路
  8. 暴破助攻提权:ruadmin
  9. 关于int变量占用字节的理解
  10. PTA 7-28 猴子选大王 (20 分)-gcc编译器过不了?