问题标签 [most-vexing-parse]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1772 浏览

c++ - 将时间转换为分钟和秒

我编写了一个代码,使用构造函数将时间转换为分钟和秒。在输出中,我以秒为单位获得时间,但它没有以分钟为单位显示时间,并且无法弄清楚我的错误,所以任何人都可以帮助我......

0 投票
2 回答
7383 浏览

c++ - 为什么 C++ 允许我们在声明变量时将变量名括在括号中?

例如这样的声明:

甚至是:

我偶然发现了这一点,因为在我的代码中我碰巧有一个类似于以下的片段:

显然我想构造一个对象C,然后在它的析构函数中做一些有用的事情。但是,编译器将其视为具有类型C (y);的变量声明,因此它会打印有关重新定义的错误。有趣的是,如果我将它写成或类似的东西,它将按预期编译。当然,最好的现代解决方法是在构造函数调用中使用。yCyC (y).f ()C (static_cast<B*> (y)){}

因此,正如我在那之后发现的那样,可以声明变量int (x) = 0;,甚至是int (((x))) = 0;,但我从未见过有人真正使用这样的声明。所以我很感兴趣——这种可能性的目的是什么,因为现在我看到它只会创建类似于臭名昭著的“最令人烦恼的解析”的案例并且没有添加任何有用的东西?

0 投票
3 回答
237 浏览

c++ - 使用参数调用类构造函数 - 请求“x”中非类类型的成员

我有一个 A 类,它接受 B 类作为构造函数参数。B 类可以从 int 值构造。我的原始代码非常复杂,但我希望我已将其简化为基本情况:

这是我得到的错误代码:

我使用 GCC (4.9.2 20150304 (prerelease)),平台:arch linux。

对 main 函数的以下修改编译良好:

我很清楚使用 A a(); 声明一个函数,而不是一个对象。但我没想到 A a(B(some_val)) 会做同样的事情,我认为这就是这里发生的事情。

你知道为什么会这样吗?


编辑:谢谢你的所有答案,看起来我需要更多地研究最令人烦恼的解析想法。

顺便说一句,事实证明,使用 clang 编译我的代码提供了更有用的错误消息和解决方案:

0 投票
1 回答
42 浏览

c++ - 如何正确地将右值绑定到构造函数?

这是我的代码:

使用test m(dummy());

输出:

使用test t(std::move(dummy()));

输出:

这是意料之中的事情。

所以我的问题是,

std::move如果参数是,是否必须使用type&&?并且不dummy()被视为右值,所以我为什么需要使用std::move?我对将右值绑定到右值引用感到困惑,我需要澄清一下。

0 投票
0 回答
29 浏览

c++ - 带有 ctor 调用的 C++ 复制省略

我试图弄清楚如何更好地组织我的代码,所以我做了一个简单的例子来代表这个问题:

给定 A 类和 B 类:

有人可以解释一下这段代码是否可以工作:

产生输出:

类Actor

测试3

A 类析构函数

虽然此代码没有:

在这种情况下,甚至没有执行 ClassB 构造函数(尽管也没有引发错误)。

将参数按值传递给ctor时,有没有办法避免复制ctor?

0 投票
1 回答
62 浏览

c++ - 从派生类对象调用基类函数。派生类构造函数中设置的基类数据成员

我已经在整个互联网上寻找以下问题的解决方案。给出的一些解决方案正是我正在做的,但是当我尝试编译我的代码时仍然出现错误。任何帮助将不胜感激。

我有一个基类 Stats,我的代码中的每个怪物类都将派生自它。这是基类:

现在我有一个从 Stats 类派生的怪物类(这里是 Orc)。Monster类的构造函数也调用了Stats类的重载构造函数:

在主函数中,我构建了一个新的 Orc 对象并尝试使用该对象调用基类函数 Stats::getArm():

我希望该函数返回盔甲的 int 值。相反,我收到了错误:

错误:在“mork”中请求成员“Stats::getArm”,它属于非类类型“Orc()”

顺便说一句,我正在用 c++11 编译。

0 投票
1 回答
1417 浏览

c++ - 无参数构造函数

我是一位相当有经验的 .net 开发人员,但对 Arduino 和 C/C++ 不熟悉,我正在尝试创建我的第一个库,这是一个用于 7 段 LED 显示屏的简单驱动程序。我有许多迟钝的编译器错误,但本着一次一件事的精神,这是第一个。我想在我的类中添加一个无参数的构造函数,当我编译库时编译得很好,但是当我尝试在草图中使用该类时,编译器给了我相当迟钝的“对‘sevenSegmentLed’中成员‘setDigit’的请求,它是非类类型“SevenSegmentLed()”

最简单的示例代码如下:

但是,如果我将构造函数签名更改为:SevenSegmentLed(int wtf);并实例化它:SevenSegmentLed sevenSegmentLed(1);它编译得很好。所以正如参数所说,WTF?

0 投票
1 回答
434 浏览

c++ - 这是一个最令人烦恼的解析?

我正在浏览这篇文章

并且在第 3 项中有一个声明说

以上是最令人烦恼的解析。如果我做了这样的事情

该声明

工作正常,并不像一个令人烦恼的解析。为什么作者说这是一个令人烦恼的解析。这是一个错字还是我错过了什么?

0 投票
1 回答
76 浏览

c++ - 将函数对象传递给构造函数

我想要实现的是制作一个可以将不同的仿函数作为参数的仿函数。

编辑:我的问题的原因,“最令人烦恼的解析”,以及解决方案的详细描述:查看这个问题和答案,整个标签,甚至是维基百科页面。尽管如此,在询问之前我还是无法确定问题所在,并且会留下这个问题,因为它可能对其他人有帮助。

我做了什么:

在头文件中functor.hpp

有了这个头文件,我可以写一个functor.cpp这样的程序:

我可以编译并运行它以获得预期的结果:

我正在努力寻找一种方法来doer用不同的运算符(不是std::plus<T>)实例化我的。

这编译没有问题,但我无法找到一种方法来调用f2(3, 7),以获取产品 21。例如,如果我在程序中添加另一行:

并尝试编译,我得到:

到底是怎么回事?似乎几乎f2(3, 7)以某种方式没有调用重载operator()...

0 投票
0 回答
102 浏览

c++ - 在这种情况下,出于什么原因,我收到“对成员的请求......在......这是非类类型......”错误?

我在以下代码中发现了一个棘手的(至少对我来说:D)问题:

改变“阿尔法阿尔法(贝塔(d));” 与以下之一,将使代码编译:

  • 阿尔法阿尔法(贝塔(5));
  • 阿尔法阿尔法(贝塔((双)d));
  • 阿尔法阿尔法{Beta{d}};//对c++11有效

我得到的编译器错误是:“在'alpha'中请求成员'value',它是非类类型'Alpha(Beta)'”

在以下情况下,我预计会出现这样的错误:

但由于它没有发生在这里,我很困惑。