问题标签 [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++ 中设置构造函数默认值
最近我学到了一些关于构造函数的知识,但今天我在为构造函数参数设置默认值时遇到了麻烦。
hpp 文件中的构造函数声明如下所示:
cpp 文件中的定义如下所示:
(_faceValue
并且_suit
是 PlayingCard 的私人成员)当我像这样进行测试时:
如果我注释掉与 card1 相关的代码,card2 可以正常工作。否则我会收到错误: 在“card1”中请求成员“getSuit”,它是非类类型“PlayingCard()”。
这一定意味着它不能识别没有参数的构造函数的使用?我究竟做错了什么?
c++ - 带两个参数的向量构造函数被解析为函数声明
考虑这个例子:
编译器在调用时抛出错误std::copy
request for member 'begin' in 'vec', which is of non-class type...
我可以解决这样的错误:
或者通过在每个参数周围加上括号,如下所示:
甚至在 C++11 中使用新的统一初始化:
为什么编译器将示例中的声明解析为函数声明?我知道大多数令人烦恼的解析,但我认为这只发生在空参数列表中。我也想知道为什么第二种解决方法有效。
c++ - 了解 C++ 编译器
我遇到了一个简单的 C++ 问题,这让我想重新开始我的 CS 学位,这次尝试学习一些东西。;)
为什么这段代码不能编译:
而另一个编译时没有任何警告
甚至很难找到不同之处(添加了额外的括号:P)。
c++ - 杂项临时对象 T()
考虑这段代码:
我发现 的值为j
1,但这应该是 0,因为int()
它是一个值等于 0 的临时值。
此外,运算符的语法new
是new typename
,但这里T()
将是一个临时对象而不是类型名称。
c++ - 从方法堆栈编译中按值返回实例
你能解释为什么这不会编译:
(这是错误:
代码:
但这确实:
c++ - C++ 声明一个函数而不是调用一个复杂的构造函数
首先,我知道在 stackoverflow 上已经有类似的问题(这个、这个和这个),这就是为什么我理解我的问题的原因。不幸的是,这并不能帮助我解决它。
虽然上述问题都与默认的无参数构造函数有关,但我在使用具有默认值的双参数构造函数时遇到了问题- 我试图构造一个调用构造函数的对象,只给出第一个值,并将其解析为函数声明而不是对象。
这是我的一些代码片段(我重命名了类名,因为它们很长且不相关):
类中的所有函数Concrete
都实现了,而类中的函数都没有实现Virtual
(除了构造函数和析构函数)。
所以,我现在的问题是我想做类似的事情:
漂亮、可爱、优雅,但它不起作用(错误与我链接的所有问题相同)。我发现这个论坛教程确实将该问题称为最令人烦恼的 parse,但它的解决方案(在参数周围加上括号)并没有解决问题(在这种情况下它是一长串错误消息,但我可以编辑如果它有帮助,它会在稍后的问题中出现 - 这些都与继承虚函数有关)。
如果我使用带有默认所有参数的构造函数,我已经测试了我的代码,即使我只是单独构造第一个参数:
我可以按原样使用代码,但如果有人能给我一个更优雅的解决方案来解决我现在正在使用的问题,我将不胜感激。
编辑:当我修复最令人烦恼的解析时收到的错误消息
如果我使用带括号的代码:
我的错误是:
为了便于阅读,我重命名了路径并插入了示例文件和类名(与上面相同)。只是一个注释:line 45
是有问题的构造函数的定义。另一方面,line 36
是线class algoContainer
。
我也试过这段代码:
然后错误完全不同:
希望这可以帮助。
c++ - 为什么在这种情况下不调用复制构造函数
说,我有一个A类
现在当我在做
到底发生了什么?
c++ - C++:“请求 Y 的非类类型 Z 的成员 X”的奇怪出现
以下程序用 g++ 4.6 编译,产生错误
在最后一行:
从代码中包含的工作变体可以看出,在 A 的构造函数的参数周围添加括号可以解决问题。
我已经看到由于将构造函数调用解释为函数声明而导致的一些相关错误,例如在创建一个没有构造函数参数但带有大括号的对象时:
但在我看来
不能解释为函数声明。
有人可以向我解释发生了什么吗?