如何解决UE4 C++中‘TEXT宏调用参数过多’的编译错误?
解决UE4 C++中UE_LOG的“函数式宏调用TEXT参数过多”错误
我一眼就瞅出问题出在哪啦——你把*ObjectName错误地塞进TEXT()宏的括号里了!
错误原因
TEXT()是UE用来处理字符串编码的宏,它只能接收纯字符串字面量,绝对不能把变量或者表达式(比如*ObjectName)混进去。你把*ObjectName写在TEXT()内部,编译器会误以为你给这个宏传了多个参数,自然就抛出了“函数式宏调用TEXT参数过多”的错误。
正确写法
把*ObjectName从TEXT()里抽出来,作为UE_LOG的第四个参数(也就是格式化字符串对应的变量参数)就搞定了:
UE_LOG(LogTemp, Warning, TEXT("Position report for %s!"), *ObjectName);
补充说明
给你捋捋UE_LOG的宏结构,方便以后避坑:
UE_LOG(日志类别, 日志级别, 格式化字符串, 格式化参数1, 格式化参数2...)
- 格式化字符串必须用
TEXT()包裹,这是为了适配UE的宽字符/窄字符处理逻辑 %s在UE日志格式化中对应TCHAR*类型的变量,而FString的*运算符刚好能返回它的TCHAR*指针,所以直接传*ObjectName完全符合要求。
内容的提问来源于stack exchange,提问作者bobbyjoe
相关产品推荐
相关产品推荐

