问题标签 [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.
c++ - 将时间转换为分钟和秒
我编写了一个代码,使用构造函数将时间转换为分钟和秒。在输出中,我以秒为单位获得时间,但它没有以分钟为单位显示时间,并且无法弄清楚我的错误,所以任何人都可以帮助我......
c++ - 为什么 C++ 允许我们在声明变量时将变量名括在括号中?
例如这样的声明:
甚至是:
我偶然发现了这一点,因为在我的代码中我碰巧有一个类似于以下的片段:
显然我想构造一个对象C
,然后在它的析构函数中做一些有用的事情。但是,编译器将其视为具有类型C (y);
的变量声明,因此它会打印有关重新定义的错误。有趣的是,如果我将它写成或类似的东西,它将按预期编译。当然,最好的现代解决方法是在构造函数调用中使用。y
C
y
C (y).f ()
C (static_cast<B*> (y))
{}
因此,正如我在那之后发现的那样,可以声明变量int (x) = 0;
,甚至是int (((x))) = 0;
,但我从未见过有人真正使用这样的声明。所以我很感兴趣——这种可能性的目的是什么,因为现在我看到它只会创建类似于臭名昭著的“最令人烦恼的解析”的案例并且没有添加任何有用的东西?
c++ - 使用参数调用类构造函数 - 请求“x”中非类类型的成员
我有一个 A 类,它接受 B 类作为构造函数参数。B 类可以从 int 值构造。我的原始代码非常复杂,但我希望我已将其简化为基本情况:
这是我得到的错误代码:
我使用 GCC (4.9.2 20150304 (prerelease)),平台:arch linux。
对 main 函数的以下修改编译良好:
我很清楚使用 A a(); 声明一个函数,而不是一个对象。但我没想到 A a(B(some_val)) 会做同样的事情,我认为这就是这里发生的事情。
你知道为什么会这样吗?
编辑:谢谢你的所有答案,看起来我需要更多地研究最令人烦恼的解析想法。
顺便说一句,事实证明,使用 clang 编译我的代码提供了更有用的错误消息和解决方案:
c++ - 如何正确地将右值绑定到构造函数?
这是我的代码:
使用test m(dummy());
输出:无
使用test t(std::move(dummy()));
输出:
这是意料之中的事情。
所以我的问题是,
std::move
如果参数是,是否必须使用type&&
?并且不dummy()
被视为右值,所以我为什么需要使用std::move
?我对将右值绑定到右值引用感到困惑,我需要澄清一下。
c++ - 带有 ctor 调用的 C++ 复制省略
我试图弄清楚如何更好地组织我的代码,所以我做了一个简单的例子来代表这个问题:
给定 A 类和 B 类:
有人可以解释一下这段代码是否可以工作:
产生输出:
类Actor
测试3
A 类析构函数
虽然此代码没有:
在这种情况下,甚至没有执行 ClassB 构造函数(尽管也没有引发错误)。
将参数按值传递给ctor时,有没有办法避免复制ctor?
c++ - 从派生类对象调用基类函数。派生类构造函数中设置的基类数据成员
我已经在整个互联网上寻找以下问题的解决方案。给出的一些解决方案正是我正在做的,但是当我尝试编译我的代码时仍然出现错误。任何帮助将不胜感激。
我有一个基类 Stats,我的代码中的每个怪物类都将派生自它。这是基类:
现在我有一个从 Stats 类派生的怪物类(这里是 Orc)。Monster类的构造函数也调用了Stats类的重载构造函数:
在主函数中,我构建了一个新的 Orc 对象并尝试使用该对象调用基类函数 Stats::getArm():
我希望该函数返回盔甲的 int 值。相反,我收到了错误:
错误:在“mork”中请求成员“Stats::getArm”,它属于非类类型“Orc()”
顺便说一句,我正在用 c++11 编译。
c++ - 无参数构造函数
我是一位相当有经验的 .net 开发人员,但对 Arduino 和 C/C++ 不熟悉,我正在尝试创建我的第一个库,这是一个用于 7 段 LED 显示屏的简单驱动程序。我有许多迟钝的编译器错误,但本着一次一件事的精神,这是第一个。我想在我的类中添加一个无参数的构造函数,当我编译库时编译得很好,但是当我尝试在草图中使用该类时,编译器给了我相当迟钝的“对‘sevenSegmentLed’中成员‘setDigit’的请求,它是非类类型“SevenSegmentLed()”
最简单的示例代码如下:
但是,如果我将构造函数签名更改为:SevenSegmentLed(int wtf);
并实例化它:SevenSegmentLed sevenSegmentLed(1);
它编译得很好。所以正如参数所说,WTF?
c++ - 这是一个最令人烦恼的解析?
我正在浏览这篇文章
并且在第 3 项中有一个声明说
以上是最令人烦恼的解析。如果我做了这样的事情
该声明
工作正常,并不像一个令人烦恼的解析。为什么作者说这是一个令人烦恼的解析。这是一个错字还是我错过了什么?
c++ - 将函数对象传递给构造函数
我想要实现的是制作一个可以将不同的仿函数作为参数的仿函数。
编辑:我的问题的原因,“最令人烦恼的解析”,以及解决方案的详细描述:查看这个问题和答案,整个最令人烦恼的解析标签,甚至是维基百科页面。尽管如此,在询问之前我还是无法确定问题所在,并且会留下这个问题,因为它可能对其他人有帮助。
我做了什么:
在头文件中functor.hpp
:
有了这个头文件,我可以写一个functor.cpp
这样的程序:
我可以编译并运行它以获得预期的结果:
我正在努力寻找一种方法来doer
用不同的运算符(不是std::plus<T>
)实例化我的。
这编译没有问题,但我无法找到一种方法来调用f2(3, 7)
,以获取产品 21。例如,如果我在程序中添加另一行:
并尝试编译,我得到:
到底是怎么回事?似乎几乎f2(3, 7)
以某种方式没有调用重载operator()
...
c++ - 在这种情况下,出于什么原因,我收到“对成员的请求......在......这是非类类型......”错误?
我在以下代码中发现了一个棘手的(至少对我来说:D)问题:
改变“阿尔法阿尔法(贝塔(d));” 与以下之一,将使代码编译:
- 阿尔法阿尔法(贝塔(5));
- 阿尔法阿尔法(贝塔((双)d));
- 阿尔法阿尔法{Beta{d}};//对c++11有效
我得到的编译器错误是:“在'alpha'中请求成员'value',它是非类类型'Alpha(Beta)'”
在以下情况下,我预计会出现这样的错误:
但由于它没有发生在这里,我很困惑。