问题标签 [ambiguous-call]

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 回答
518 浏览

c# - 当返回类型显式时,在返回不同类型的方法之间调用不明确

可能重复:
关于 C# 中模糊调用的问题

我有这两种方法:

以下调用给了我“方法之间的歧义”错误:

当我要求一个TypeA对象显式返回而不是通过var或以其他方式返回时,这是如何发生的?


TypeA并且TypeB是单独的类,它们没有任何共同点。

0 投票
1 回答
234 浏览

scala - 对具有继承内部类 scala 的重载定义的模糊引用

所以这是有问题的代码:

编译器说,dynamics在两者中都World匹配GridWorld签名。但是, inWorld它是抽象的,然后在 中实现GridWorld,所以在我看来,很明显我在调用GridWorld.this.dynamics.

我注意到的另一件事是,如果我删除extends super.Statein SimpleGridWorld,一切正常(我不明白为什么,我确实需要GridWorld.State这里定义的功能)。有什么解释吗?谢谢!

更新 无论如何我看到我的设计模式很奇怪,因为如果StateinSimpleGridWorld不继承GridWorld.this.Statedynamics将引用根特征中定义的未实现的模式World(这是有道理的,因为实现 inGridWorld可能使用GridWorld.this.State其中可能不存在的功能SimpleGridWorld.this.State)。但我想要的是:

  1. XXXWorld.this.State必须继承它super.State(或只是使用它)
  2. dynamics除非在此处被覆盖,否则总是指super.dynamics是否在超级特征/类中实现。

我怎样才能做到这一点?我认为这不是一个完全不相关的问题,可能前一个问题的答案会告诉我如何重新设计我的模式。

0 投票
5 回答
2662 浏览

c# - 如何解决 Enumerable 和 MoreLINQ 之间的模糊 ZIP 调用?

我遇到了扩展方法解析的问题。LINQ 和 MoreLINQ 包含zip方法,它从4.0版本开始存在于 .NET 中,并且始终存在于MoreLINQ库中。但是您不能使用带有旧扩展方法语法的实现之一。所以这段代码不会编译

错误:

我在这篇文章中找到了 Jon Skeet 为 MoreLINQ 制作的Concat方法的良好分辨率,但我不知道方法的良好分辨率。stringzip

注意:您始终可以使用静态方法调用语法,并且一切正常

但有点错过了扩展语法糖的意义。如果您使用 LINQ 和 MoreLINQ 调用进行大量数据转换 - 您不想在中间使用静态方法调用。

有没有更好的方法来解决这种歧义?

0 投票
1 回答
394 浏览

java - 在 Java 7 上运行的 Eclipse Indigo 不会显示对方法的模棱两可的引用

我有一个曾经在 Java 1.5 上运行的应用程序。它编译并运行良好。最近,我决定迁移到 Java 1.7。

当我用 Maven 编译代码时(我在 pom.xml 中更新了 Java 版本),它显示了几个编译错误,说 somes 对某些方法的引用是模棱两可的,这是真的。但是,在 Eclipse 上,这些错误没有显示(我也将 Eclipse 的编译器更新到 1.7)。

我的一个朋友试图在 Eclipse Juno 上做同样的事情并且错误正在显示。

任何想法如何解决这个问题?

谢谢

0 投票
2 回答
5375 浏览

c++ - ISO C++ 说这些是模棱两可的,

我必须重载移位运算符“<<”,以便在控制台中写入和在二进制文件中写入..

我在 ostream 重载方面做得很好,而我在重载 fstream 时遇到了一些问题,这里是:

在我的标题中:

在我的 cpp 文件中:

这是我面临的错误:

在函数 `std::fstream& operator<<(std::fstream&, const Fotografia&)' 中:

到目前为止,我所理解的是,我刚刚创建的重载函数和标准 fstream << 之间存在歧义。现在,我不明白为什么,因为我的重载函数应该只适用于“Fotografia”类(由我创建),而我正在尝试编写 char * 。

我想我可以通过使用“::”范围调用 fstream 运算符来解决这个问题,但我不确定。

有人可以帮我吗?:)

编辑:

我正在发布标题的代码和构造函数的代码

这是在cpp中:

0 投票
1 回答
187 浏览

c# - 为什么我在 vb 中得到一个模棱两可的调用,但在 c# 中却没有?

我在 c# 中有一个具有以下方法的类:

我不得不添加一个新的可选参数。为了保持向后兼容性,我添加了几个方法,每个方法多了一个参数,并且我重写了以前的方法来调用新的方法:

这似乎在 c# 中有效,尽管我知道仅使用 null 调用 MyMethod 将是模棱两可的(它可能是最后一个清单中的两个第一个方法中的任何一个)。

但是,当尝试从 Visual Basic 调用 MyMethod 时,它不会在智能感知中列出。如果我手动编写它,我会收到一个错误:“Ambiguous call”。

为什么会这样?

0 投票
2 回答
746 浏览

c++ - 显然模棱两可的调用不会导致 GCC 上的编译错误

令我惊讶的是,GCC 不认为foo()以下程序中的调用不明确:

上面的函数调用true在 GCC 4.7.2 和 GCC 4.8.0(beta)上编译并返回,而在 Clang 3.2 和 ICC 13.0.1 上它不会编译(如我所料)。

这是“不需要诊断”的情况,还是 GCC 中的错误?鼓励参考 C++11 标准。

0 投票
2 回答
270 浏览

c++ - 解决依赖于参数的查找歧义的非侵入式方法

这是我的情况:

我正在尝试使用具有 typeFoo::a并指定 a的库Foo::swap。我正在使用的另一个库有一个std::vector<Foo::a>实例化。我正在尝试使用 Visual Studio 11.0 在 Windows 上编译它,并注意到std::vector::swap映射到_Swap_adl它执行不合格的交换调用。

这就是让我陷入 ADL 和模棱两可的功能解决方案的问题。是否有一些魔法可以让我使用Foo::swap(甚至std::swap:)),而无需对我正在使用的库进行一些“重大”更改(缺少从 Foo 删除/重命名交换等的东西)?

编辑:添加一个最小的例子来捕捉正在发生的事情和错误。

我不会评论代码的效率,因为它只是我必须使用的东西,但@http: //pastebin.com/Ztea46aC上的错误日志可以很好地了解内部发生的情况。这是编译器特定的问题,还是可以从这段代码中获得更深入的学习?

编辑2:我已经尝试专门针对有问题的特定类型,但这并不能解决歧义。关于为什么会这样的任何指示也会有所帮助。

http://pastebin.com/sMGDZQBZ是这次尝试的错误日志。

0 投票
2 回答
735 浏览

ambiguity - JavaCC 歧义:如何告诉解析器从“较长匹配”列表中选择某个匹配?

对于某些输入,解析器会显示“可能的较长匹配类型:{ <EXPRESSION>, <TEXT> } ”,但由于某些奇怪的原因,它选择了错误的。

这是来源:



如果我们尝试使用这个语法解析“a.bc.d”,它会说“FOUND A <EXPRESSION> MATCH (a.bc.d)”

我的问题是为什么它选择将输入解析为<EXPRESSION> 而不是 <TEXT>

另外,如何强制解析器选择正确的路径?我尝试了无数的 LOOKAHEAD 场景,但都没有成功。

例如,当使用 "a.bc.d"作为输入时,正确的路径是 <TEXT>,而对于" { a.bc.d } " 则使用<EXPRESSION>

提前致谢。

0 投票
1 回答
192 浏览

c++ - 为什么这些重载不是模棱两可的?

下面的代码用 gcc 和 clang 编译得很好。

看起来重载解决方案正在选择第一个重载(那个identity<T>::type)。

有人可以解释为什么重载不是模棱两可的吗?据我所知,它们之间的唯一区别是第一个参数是非推导上下文,而第二个参数不是,但是由于我明确提供了模板参数,所以我不不明白为什么这很重要。