"Expected '(' for function-style cast or type construction"错误是什么意思?

What does the "Expected '(' for function-style cast or type construction" error mean?

本文关键字:错误 construction 是什么 type 意思 function-style Expected for cast or      更新时间:2023-10-16

我得到错误"Expected '(' for function-style cast or type construction"),并尽我所能在线研究此错误的含义,但无法找到导致此错误的任何文档。

所有关于Stack Overflow的相关问题,我发现bug修复了一个特定的代码片段,并没有更一般地解释导致错误的原因。

这些包括

  1. 预期& # 39;(& # 39;对于函数式强制转换或类型构造,答案突出了代码中的几个问题。目前还不清楚到底是哪个问题导致了错误。
  2. c++ Xcode期望'('对于函数风格的强制转换或类型构造在主函数内部定义函数。这似乎是一个明显的语法问题,但是为什么会产生这个特定的错误,我仍然不清楚。
  3. & # 39; (& # 39;对于函数风格强制转换或构造类型Xcode错误。在最后一个示例中,OP调用函数的方式看起来与函数声明非常相似,而且它们声明了一个具有相同名称但不同签名的函数。根据抛出错误的位置和错误的消息,似乎错误与函数声明有关。

我能得到一个文档风格的答案,翻译什么"函数风格转换"answers"类型结构"在简单的英语意味着什么?编译器何时选择抛出此错误而不是其他错误?

我不想要一个特定于我自己的错误的答案,但根据要求,这是我的MCVE

#include <boost/integer_traits.hpp>
class Test{
    const double MAX_DEPTH_VAL = (double) boost::integer_traits<unsigned short>.const_max;
    const double MIN_DEPTH_VAL = (double) boost::integer_traits<unsigned short>.const_max;
};

这个答案引导我相信这种语法是可能的https://stackoverflow.com/a/2738576/3303546

这是一个语法错误现在,非程序员或业余爱好者可能会听到术语语法错误并将其等同于一般错误。但在c++(和其他语言)中,它有更具体的含义。

有一种语言语法,它是一组规则,编译器在翻译的早期阶段根据这些规则将源代码分解为逻辑组。这是在赋予这些组任何意义之前(这部分有时被称为语义检查)。

您看到的语法错误意味着编译器无法将源代码与c++的语法规则相匹配。正是因为它不能做到这一点——编译器很难知道程序员的意图。因此,语法错误消息通常是猜测,或者与程序员的意图无关。

当您看到此错误时,编译器正在建议一种方法来更改可能匹配其中一个语法规则的代码,但在这种情况下,这可能是也可能不是一个很好的修复方法。

因此,您可以将这种错误视为"一般语法错误",而不必过多担心错误的细节。要解决这个问题,请返回到您确定没有语法错误的更简单的表达式,然后构建您想要编写的内容。

英语中的一个类比可能是句子"I the room went of"。想象一下一些语言翻译软件。这与任何已知的句子结构都不匹配,但它能报告什么错误信息?实际的建议可能不会帮助你修改句子。


在您的特定示例中,有一个语法错误。g++的错误信息是不同的:

错误:期望的主表达式之前'。"令牌

,其中主表达式是c++语法中的一个条目。g++看到.令牌并假定您指的是成员访问操作符。但是语法规定成员访问操作符的左操作数必须是主表达式(语义规则规定该主表达式表示要访问其成员的对象)。

然而,在实际代码中,左侧是(double) boost::integer_traits<unsigned short>,它与主表达式的语法规范不匹配。(实际上它是一个类型名)。编译器不能从这里继续下去,所以它退出了。

您的编译器也未能将代码与任何语法规则匹配,但它猜测您正在尝试编写函数风格的强制转换或类型构造。

"函数式强制转换"意味着像int(5.0)这样的代码,因此它可能将boost::integer_traits<unsigned short>识别为类型名,并且它猜测您指的是boost::integer_traits<unsigned short>(const_max),即将某些变量const_max强制转换为该类型。

我不确定你的编译器在这里所说的"类型构造"是什么意思。

NB。如果你想知道如何修复你的问题中的实际代码,我建议开始一个新的问题,你张贴的代码和错误消息,并询问如何修复代码。

我通过在我的Makefile中添加-std=c++20来修复此错误。