[UE4]v4.11.0release源码编译失败:error C2065: 'bAttributeLessDraw': undeclared identifi

本文详细介绍了在编译UE4.11.0release源码时遇到的错误,包括错误代码来源、解决方法以及相关背景信息。特别指出了解决问题的步骤,如注释错误代码、修改文件编码格式等,并提供了社区讨论的链接作为参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

UE4.11.0 release 源码编译时会报错:

 

F:\EpicGames\UnrealEngine-4.11.0-release\Engine\Source\Runtime\OpenGLDrv\Private\OpenGLCommands.cpp(2794): error C2065: 'bAttributeLessDraw': undeclared identifier

F:\EpicGames\UnrealEngine-4.11.0-release\Engine\Source\Runtime\OpenGLDrv\Private\OpenGLCommands.cpp(2800): fatal error C1020: unexpected #endif

 

解决办法:

注释掉报错的代码 OpenGLCommands.cpp(2794),出现这个问题应该是github上的ue4贡献开发者误提交导致的,以前拿源码编译没碰到这种问题

 

//  @Todo Workaround for radr://15076670 "Incorrect gl_VertexID in GLSL for glDrawElementsInstanced without vertex streams on Nvidia”
 #if PLATFORM_MAC
     if(bAttributeLessDraw)
     {
         glDisableVertexAttribArray(0);
         ContextState.VertexAttrs[0].bEnabled = false;
         ContextState.VertexStreams[0].VertexBuffer = nullptr;
     }
 #endif

 

如果是mac系统,则不能删除,否则会出现其他编译错误,在UE4论坛上看到的:

OpenGLCommands.cpp文件的编码格式修改为UTF8 BOM,默认是ANSI编码。

见:https://forums.unrealengine.com/showthread.php?106156-error-C2065-bAttributeLessDraw-undeclared-identifier-build-failed-with-4-11-0-release-source

 

2016-04-16更新:

在论坛上看到的,Epic的工程师说他们环境下没有这种问题,而提出这种问题的用户,操作系统的非unicode程序的编码格式都不是英语,所以,这也可能是git的问题。仅供参考。

 

2016-04-28更新:

感觉网友wdhwg001的回答:

第2793行末尾有一个”(中文右双引号),替换为英文双引号并保存即可。

 

 

 

<think>好的,我现在需要解决用户遇到的C++编译错误:error C2065: 'round'未声明的标识符。这个问题通常是因为编译器找不到round函数的声明。首先,我得回忆一下round函数在C++中的情况。 round函数是C++11标准引入的数学函数,属于<cmath>头文件。如果用户的编译器不支持C++11或更高版本,或者没有包含正确的头文件,就会导致这个错误。所以,我应该先检查用户是否包含了<cmath>,并且是否启用了C++11或更高标准。 接下来,用户可能在代码中直接使用了round而没有包含头文件,或者使用了旧的编译器,比如Visual Studio的某些旧版本,默认可能不启用C++11。另外,有些编译器可能需要特定的宏定义,比如_USE_MATH_DEFINES来启用数学常量和函数。 另外,用户提到的错误信息C2065是微软编译器MSVC特有的错误代码,说明用户可能在使用Visual Studio。这时候需要确认项目属性中的C++语言标准设置是否正确,是否设置为C++11或更高。如果用户的项目设置是C++03或更早,那么round函数确实不可用。 还有一种可能是用户忘记使用命名空间std,但根据C++标准,cmath中的函数通常位于全局命名空间,或者需要std::前缀,这取决于编译器的实现。不过为了可移植性,最好使用std::round或者包含正确的头文件。 此外,如果用户的编译器不支持C++11,可能需要寻找替代方法,比如自己实现round函数,或者使用floor和ceil函数结合条件判断来模拟round的功能。 最后,还需要检查代码中是否有拼写错误,例如是否写成了roudn或者其他拼写错误,这也会导致编译器无法识别。 总结一下,可能的解决方案包括: 1. 包含<cmath>头文件。 2. 启用C++11或更高版本的编译标准。 3. 使用std::round显式调用。 4. 检查编译器兼容性,必要时使用替代实现。 5. 确保没有拼写错误。 用户可能需要根据他们的开发环境进行相应的调整,比如在Visual Studio中设置项目属性中的C++语言标准,或者在代码中定义相关的宏。</think>关于C++编译错误`error C2065: 'round' undeclared identifier`的解决方案如下: ### 1. 检查头文件包含 `round`是C++11标准引入的数学函数,需包含头文件: ```cpp #include <cmath> // 正确头文件 ``` ### 2. 启用C++11标准 在项目属性中设置: - Visual Studio:项目属性 > C/C++ > 语言 > C++语言标准 > ISO C++17 标准(或更高)[^1] - GCC/Clang:编译时添加参数`-std=c++11` ### 3. 显式指定命名空间 部分编译器要求显式命名空间: ```cpp double result = std::round(3.14); // 正确调用方式 ``` ### 4. 检查编译器兼容性 若必须兼容C++03标准,可改用传统方法: ```cpp #include <cmath> double round_impl(double x) { return (x > 0.0) ? std::floor(x + 0.5) : std::ceil(x - 0.5); } ``` ### 5. 验证编译器支持 在代码中添加验证: ```cpp #if __cplusplus >= 201103L // 支持C++11 #else #error "需要C++11标准" #endif ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值