问题标签 [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.
c++ - 模板函数调用歧义错误
我不熟悉模板。我刚刚开始学习它。为什么我在以下程序中出现错误?
错误:
请帮我。
crtp - 为什么在尝试使用 CRTP 进行多态性时,G++ 无法解决这种明显容易产生歧义的范围?
我正在尝试创建模板类,每个模板类都可以解决问题的特定方面,以便能够在不求助于创建传统抽象虚拟类的情况下将它们混搭。为此,我相信 CRTP 将是最好的范例。但是,当更多地使用 CRTP 时,我发现这种弱解析逻辑陷入了困境 - 编译器 (g++ 4.8.2) 无法区分不同类上的两个方法,即使它们的签名不同 - 只有方法名称是相同的。
类实现:
然后它被用作
编译时,此错误浮出水面:
这是编译器错误还是实际的预期结果?
c++ - 如何消除构造函数选择的演员表
我一直在玩基于 Boostmap_list_of
模板的通用机制,用于将值从一组值转换为另一组值。这两个集合最终可能是不相交的,因此不仅仅是从一种枚举类型转换为另一种。
无论如何,以下代码按预期编译和运行,但我遇到了一些问题。的定义enumToString
,就在之前main()
,需要static_cast<const std::map<COLOR, std::string> &>
演员表。(FWIW,如果convert()
函数在映射中找不到键,则此构造函数会导致函数将键值作为字符串返回。)如何在没有这种强制转换的情况下编译代码,同时坚持使用 C++03?
可能是没有强制转换,编译器根本没有足够的类型信息来确定KeyToValue
要调用哪个构造函数。
这是使用演员表的正确控制台输出:
如果没有强制转换,g++ (-std=c++98) 会生成以下诊断信息:
更新:这是简化版本。我怎样才能摆脱演员阵容?
java - 为什么这不会产生歧义?
我刚刚编写了一些具有以下结构的代码:
我很惊讶这个编译,如果我调用
然后它会选择第一个。显然,这在某种意义上是自然选择的方法,但如果第一种方法不存在,这将是调用第二种方法的合理方法(使用空的可变参数数组)。那么它肯定应该被认为是模棱两可的并产生编译时错误吗?
还是将其视为特殊情况?
如此对待它似乎是错误的,因为这意味着添加一个新方法可能会破坏现有代码,这不是一个非常愉快的事态。
(天知道如果第一个被添加为包含第二个的子类的新方法,你最终会调用哪个......)
c++ - 这个函数调用在 C++ 中是如何模棱两可的?
考虑以下程序:(在此处查看现场演示http://ideone.com/7VHdoU)
编译器给出以下错误:
但我不明白为什么以及它是如何模棱两可的?这里是否涉及任何类型的自动类型提升?我知道用 (3L) 调用 fun 可以使编译成功。
c++ - 为什么这个赋值操作会导致函数调用不明确?
考虑以下程序,它编译并运行良好:
但是如果我稍微改变main()
函数的代码如下:
编译器给出以下错误消息(请参阅此处的实时演示)
为什么这个调用是模棱两可的?这背后的原因是什么?看起来有很多重载,operator=
例如一个 for char
,一个 for char*
,一个 forconst char*
等。这就是上面的程序使编译器变得模棱两可。
c# - C# 编译器抱怨函数本身不明确
在我继承的 C# WebApp 项目中工作。我有几个函数定义......
当我在应用程序上进行构建时,它编译良好,错误为零。
但是,当我尝试运行该网站(使用 F5)时,它会在我的浏览器中启动,然后出现编译错误:
它抱怨相同的确切功能与自身模棱两可。我已经对所有源代码进行了搜索,这是该函数的唯一声明,所以我真的对编译器感到困惑的是摸不着头脑。
我在 Google 上发现的唯一一个与此类似的问题是有人的项目以某种方式最终引用了自己。我仔细检查以确保该项目没有引用自身,而事实并非如此。
我也尝试过对项目进行清理和重建。
无论出于何种原因,这个项目在 IDE 中编译得很好,但是当尝试在浏览器中运行它时,它就出错了。
我在 VS 2015 中工作,目标是 4.5.2 版本的框架。
c++ - 错误:调用重载的 'abs(float&)'
我正在使用 FRDM K64F 控制电机,我正在使用 mbed 的电机库。
编译时,它会在库附带的头文件中发现此错误。
错误包含在此文件中。
它调用motor.h,它位于:
最后我从这里给他们打电话:
有任何想法吗?
c++ - 解决跨基类的虚方法重载
视觉工作室 2013。
鉴于:
我有一个水槽:
但我得到以下编译器错误:
错误 C2385:“foo”的不明确访问
可能是基础“base_1”中的“foo”
或者可能是基础“base_2”中的“foo”
错误 C2660:“base_1::foo”:函数不接受 2 个参数
错误 C3861:“foo”:找不到标识符
我知道我可以通过以下方式解决此问题:
但正如你可以想象的那样,虚拟继承已经是我不得不忍受的一种罪过。我可能会写一个适配器。但我不明白是什么阻止了编译器尝试解析 base_2 中的 foo。我的同事认为这是编译器错误,但我并没有这么快责怪供应商。
C++ 规范对跨基类解决重载虚方法有什么看法?
haskell - 在 Haskell 中出现“显示”的模棱两可
我是函数式编程的新手,我正在尝试用 Haskell 创建和展示一个 Stack。我希望我的程序向我展示我正在使用它构建的堆栈。这是我的代码:
使用“show (push 1 empty)”,我希望得到一个答案(或多或少):“1 <- |”但我无法编译代码。当我尝试时,它显示以下错误:
我理解程序可能会将 Prelude 中的“表演”与 be 定义的“表演”混淆的错误,但我在代码中看不到该错误。此外,有些伙伴的代码相同,程序运行良好。
有什么我必须改变或我错过了?
谢谢!