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

c++ - Test t 有什么区别?和测试 t();? 如果测试是一个类

可能重复:
为什么没有调用构造函数?

我正在使用 Visual Studio 2012,假设 Test 是一个类

当我创建一个新的Test实例时,以下两种方式有什么区别?

方式1

方式2

我在下面的代码中得到了这个问题,最初,我在方式 2 中定义了一个 A 的实例,我只得到一个错误,因为 B 没有提供默认构造函数,但是当我在方式 1 中定义它时,我得到了一个额外的错误。

如果我在方式 1 中定义一个

我会得到另一个错误说

错误 C2248:“A::A”:无法访问在“A”类中声明的私有成员

所以我想这两种方式之间一定存在一些差异。

0 投票
2 回答
243 浏览

c++ - 解析对临时函数对象的调用中的歧义

我怀疑在下面的代码中,由于最棘手的解析问题,使用构造函数参数和函数调用运算符参数调用临时函数对象在某种程度上是模棱两可的。

Ideone上输出。

添加括号之类(Fun(a))(b)的问题可以解决,但我不太明白如何Fun(a)(b)将其解析为声明Fun a

0 投票
1 回答
120 浏览

c++ - 奇怪的未解决的外部编译 DLL

我正在尝试按照此站点上的说明进行操作:http: //support.microsoft.com/kb/q168958

这是代码:

将其放入 VS 中的 WIN32 DLL 项目中会出现以下错误:

我不确定为什么链接器找不到定义,因为所有内容都在那里定义,以及 TestBuffer 的导出语句。此外,在示例中,我什至不需要导出 TestBuffer 的显式实例化,因为它没有在 DLL 接口中公开,只有 GetCurrentDir() 是。

关于为什么没有为 TestBuffer 生成代码以便链接器可以找到它的任何猜测?

PS 这是一个人为的例子来演示这个问题,而不是实际的生产代码。

0 投票
3 回答
877 浏览

c++ - 避免最麻烦的解析

如何让编译器创建临时对象,在它们上使用默认构造函数而不定义函数?

0 投票
6 回答
4545 浏览

c++ - Most Vexing Parse 的目的是什么?

维基百科上我发现了这个:

[This] 可以消除歧义

  1. 类 [ ]的变量定义,采用类 [ A] 的匿名实例A
  1. 一个函数的函数声明,它返回一个 [ A] 类型的对象并接受一个(未命名的)参数,该参数是一个返回类型 [ A] 的函数(并且不接受输入)。

大多数程序员期望第一个,但 C++ 标准要求将其解释为第二个。

但为什么?如果 C++ 社区的大多数人都期望前一种行为,为什么不将其作为标准呢?此外,如果考虑解析歧义,上述语法是一致的。

有人可以启发我吗?为什么该标准将其作为一项要求?

0 投票
3 回答
110 浏览

c++ - C++ 构造函数问题

我想知道是否有人可以帮助我解决c++gcc最新版本)中的奇怪行为。下面是一些成功编译的代码,由于缺少适当的构造函数,我预计会出现编译时错误。谁能解释发生了什么?

}

如果我尝试调用 的函数class A,我会得到一个编译时错误:

结果是:

谢谢!

0 投票
2 回答
931 浏览

c++ - C++中的object和object()有什么区别

实例化obj和 和有什么不一样obj()obj调用上面提到的默认构造函数(1)。哪个构造函数会obj()调用?

0 投票
2 回答
95 浏览

c++ - 这个语法是什么意思

以下代码编译。但是如果我编写代码来调用test使用jar它的方法会给我一个编译错误。这里真正发生了什么。

0 投票
1 回答
145 浏览

c++ - 为什么数组元素的地址有时会被误认为是声明?

我有一些用户定义的迭代器,时不时会遇到一个很容易解决的奇怪错误,但我不明白为什么会得到它:

我有一个名为 array_iterator 的类,其中嵌入了 typedefs row_iterator 和 col_iterator。row_iterator 构造函数将 col_iterator 作为其第一个参数。第一个和最后一个语句工作得很好。中间语句编译失败,出现以下错误:

写 &( bytes[0] ) 并不能解决问题(不足为奇,因为 [] 的优先级高于 &)。当然,我可以将“a”替换为显式 col_iterator 构造函数调用,但为什么必须这样做呢?而且如果有问题,为什么最后一行的col_iterator构造函数编译?

谢谢。

0 投票
1 回答
307 浏览

c++ - 这是VS2008的错误吗?函数式变量初始化

在下面的代码中,该行

在 Visual Studio 2008 中导致C2061错误:

语法错误:标识符 'identifier' - 编译器在不期望的地方找到了标识符。确保在使用之前声明了标识符。初始化器可以用括号括起来。为避免此问题,请将声明符括在括号中或使其成为 typedef。当编译器将表达式检测为类模板参数时,也可能会导致此错误;使用 typename 告诉编译器它是一个类型。

如果我改为

它没有抱怨。这是编译器错误吗?如果不是,为什么投诉?

我的关于框说:版本 9.0.30729.1 SP

我与 GCC 的同事没有看到此错误。