问题标签 [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 投票
1 回答
314 浏览

c++ - 当有额外的括号时,在临时对象上调用用户定义的 operator+ 时出错

0 投票
2 回答
2757 浏览

c++ - 结构预期在 . 或 .* 但它是一个结构

我收到编译错误structure required on left side of . or .*chest.contents[0]chest它是一个结构:

0 投票
2 回答
1049 浏览

c++ - 统一初始化语法差异

做和做有什么区别

和,

避免最烦人的解析?我什么时候应该使用特定的?

0 投票
2 回答
1200 浏览

c++ - C++ 中没有可用的成员

我有一堂课

在 main.cpp 我有:

这是声明方法的正确方法还是我弄错了?VS2010 根本不识别这种方法。它指出

表达式必须有一个类类型

0 投票
1 回答
979 浏览

c++ - 参数子句中声明符和抽象声明符之间的C ++ 11歧义?

考虑以下 C++11 代码:

类型是否f相同:

或者是这样的:

也就是说,应该将(C)其解释为declarator参数名称的C一个,还是abstract-declarator一个函数参数的一个?

这在标准中的什么地方规定?

0 投票
2 回答
259 浏览

c++ - 最令人头疼的解析和指针间接/解引用

最小代码:

期望至少A((*p))会调用A::A(int=0). 即使在周围放置多个大括号*p,也将语句视为A *p;.
对于不调用foo构造函数的相关语句也是如此。A::A(int=0)这是一个演示

问题

  1. 为什么甚至 (2) 和 (4) 都被视为声明?
  2. foo陈述(3)和(4)中的描述是什么?
0 投票
2 回答
308 浏览

c++ - 为什么此语句不调用构造函数 - C++

一个模板类和一个普通类:

然后我想Holder<Animal>用这个语句实例化 a Holder<Animal> a(Animal());,但是它失败了。我的意思Animal()是不被视为临时对象。而且这个语句不调用Holder's 的构造函数。

如果有人可以解释?我不清楚。我猜a这里会变成一种类型。然后,我使用Holder<Animal> a = Holder<Animal>(Animal());,效果很好。所以,这里有一些情况:

  1. Holder<Animal> a(Animal()); a.Ref().Print(); // error
  2. Holder<Animal> a = Holder<Animal>(Animal()); a.Ref().Print(); // ok
  3. Holder<int> b(4); b.Ref() = 10; cout << b.Ref() << endl; //ok

能解释一下吗?我只是对第一个陈述有点困惑。以及此语句导致的错误信息:

GCC4.7.2error: 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

0 投票
2 回答
429 浏览

c++ - 有没有办法强制“最令人烦恼的解析”成为一个错误,即使是在一个类的基础上?

是否有可能(对 A 类进行任何修改)进行以下工作?即,使最令人头疼的解析错误?

0 投票
1 回答
196 浏览

c++ - 无法从朋友类访问私人和公共成员

我有一个名为 locationdata 的类,它有一个名为 PointTwoD 的朋友类

我有另一个名为 PointTwoD 的类,它假设包含该类: locationdata as a private member 。

};

当我尝试在我的 main() 中实例化一个 PointTwoD 对象并使用来自 locationdata 的函数时,我收到一个错误:在非类类型 PointTwoD()() 的“test”中请求成员“location”。

我的问题是

1)为什么我的朋友类不工作,我想我应该能够访问所有属性,使用朋友的所有功能,一旦它被声明

2) 我应该使用继承而不是朋友类来访问来自类 PointTwoD 的类 locationdata 的所有方法和属性吗?

第一次更新:在我将声明从 PointTwoD test() 更改为 PointTwoD test 后,我​​收到以下错误:'->' 的基本操作数具有非指针类型,这是什么意思以及如何解决它

0 投票
1 回答
164 浏览

c++ - 最令人头疼的解析:为什么 `g( ( f() ) );` 不调用 `f` 的默认构造函数并将结果传递给接受 `f` 的 `g` 的 ctor?

这不是最令人烦恼的解析的重复:为什么不 A a(()); 工作?,它基于 形式的解析A a(());,其 OP 认为能够A使用额外的括号集默认构造一个对象。

相比之下,我的问题是关于 2 个类,f并且g,哪里f有一个默认构造函数,而gctor 需要一个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只有在实例被命名时才实例化?

如何在不命名实例或使用统一初始化的情况下获得所需的实例化效果?