问题标签 [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++ - 结构预期在 . 或 .* 但它是一个结构
我收到编译错误structure required on left side of . or .*
,chest.contents[0]
但chest
它是一个结构:
c++ - C++ 中没有可用的成员
我有一堂课
在 main.cpp 我有:
这是声明方法的正确方法还是我弄错了?VS2010 根本不识别这种方法。它指出
表达式必须有一个类类型
c++ - 参数子句中声明符和抽象声明符之间的C ++ 11歧义?
考虑以下 C++11 代码:
类型是否f
相同:
或者是这样的:
也就是说,应该将(C)
其解释为declarator
参数名称的C
一个,还是abstract-declarator
一个函数参数的一个?
这在标准中的什么地方规定?
c++ - 最令人头疼的解析和指针间接/解引用
最小代码:
期望至少A((*p))
会调用A::A(int=0)
. 即使在周围放置多个大括号*p
,也将语句视为A *p;
.
对于不调用foo
构造函数的相关语句也是如此。A::A(int=0)
这是一个演示。
问题:
- 为什么甚至 (2) 和 (4) 都被视为声明?
foo
陈述(3)和(4)中的描述是什么?
c++ - 为什么此语句不调用构造函数 - C++
一个模板类和一个普通类:
然后我想Holder<Animal>
用这个语句实例化 a Holder<Animal> a(Animal());
,但是它失败了。我的意思Animal()
是不被视为临时对象。而且这个语句不调用Holder
's 的构造函数。
如果有人可以解释?我不清楚。我猜a
这里会变成一种类型。然后,我使用Holder<Animal> a = Holder<Animal>(Animal());
,效果很好。所以,这里有一些情况:
Holder<Animal> a(Animal()); a.Ref().Print(); // error
Holder<Animal> a = Holder<Animal>(Animal()); a.Ref().Print(); // ok
Holder<int> b(4); b.Ref() = 10; cout << b.Ref() << endl; //ok
能解释一下吗?我只是对第一个陈述有点困惑。以及此语句导致的错误信息:
GCC4.7.2
:error: request for member 'Ref' in 'a', which is of non-class type 'Holder<Animal>(Animal (*)())'
VS10
: error C2228: left of '.Ref' must have class/struct/union
,error C2228: left of '.Print' must have class/struct/union
c++ - 有没有办法强制“最令人烦恼的解析”成为一个错误,即使是在一个类的基础上?
是否有可能(对 A 类进行任何修改)进行以下工作?即,使最令人头疼的解析错误?
c++ - 无法从朋友类访问私人和公共成员
我有一个名为 locationdata 的类,它有一个名为 PointTwoD 的朋友类
我有另一个名为 PointTwoD 的类,它假设包含该类: locationdata as a private member 。
};
当我尝试在我的 main() 中实例化一个 PointTwoD 对象并使用来自 locationdata 的函数时,我收到一个错误:在非类类型 PointTwoD()() 的“test”中请求成员“location”。
我的问题是
1)为什么我的朋友类不工作,我想我应该能够访问所有属性,使用朋友的所有功能,一旦它被声明
2) 我应该使用继承而不是朋友类来访问来自类 PointTwoD 的类 locationdata 的所有方法和属性吗?
第一次更新:在我将声明从 PointTwoD test() 更改为 PointTwoD test 后,我收到以下错误:'->' 的基本操作数具有非指针类型,这是什么意思以及如何解决它
c++ - 最令人头疼的解析:为什么 `g( ( f() ) );` 不调用 `f` 的默认构造函数并将结果传递给接受 `f` 的 `g` 的 ctor?
这不是最令人烦恼的解析的重复:为什么不 A a(()); 工作?,它基于 形式的解析A a(());
,其 OP 认为能够A
使用额外的括号集默认构造一个对象。
相比之下,我的问题是关于 2 个类,f
并且g
,哪里f
有一个默认构造函数,而g
ctor 需要一个f
. 我想g
用一个临时参数调用 ctor f
,所有这些都没有使用统一的初始化语法。的 ctor 中有一条std::cout
语句g
,因此缺少输出表示函数声明而不是g
对象实例化。我在注释中用 3 个数字注释了示例代码。#1 和 #2 编译时将 #3 注释掉,反之亦然:
#1:我认为 #1 声明了一个匿名函数,该函数返回 ag
并接受一个指向函数的指针,该函数接受 0 个参数并返回一个f
. 我错了吗?
#2:所以,我认为 #2 中额外的一组括号将强制将封闭的内容作为函数调用进行评估,即对f
的默认 ctor 的调用。但它仍然是一个函数声明。为什么?
#3:是 #2 的变体,区别在于 #3 添加了实例名称myG
。如果 #1 和 #2 被注释掉,#3 将实例化对象。否则我会在 VC12 中得到这些错误:
error LNK2019: unresolved external symbol "struct g __cdecl f(void)" (?f@@YA?AUg@@XZ) referenced in function _main
和
fatal error LNK1120: 1 unresolved externals
.
和 g++ 4.8 中的这个错误:undefined reference to 'f()'
它们是什么意思,我为什么要得到它们?
为什么#3只有在实例被命名时才实例化?
如何在不命名实例或使用统一初始化的情况下获得所需的实例化效果?