草庐IT

ambiguity

全部标签

c++ - 传递给模板函数的两个 lambda 使参数的类型推导不明确——为什么?

如果我将一个lambda传递给它,我有一个模板可以工作,但是在一个将两个lambda映射到相同模板化类型的相关模板中,它无法推断出该类型,并且MSVC++Express2013提示模板参数不明确。首先要明确的是,这里没有进行重载(或特化)——我下面的两个示例是唯一具有这些标识符的实体。以下是模板,它们简单地将可调用对象应用于参数并返回结果:templateautoWhichOp1(Aargument,OPfirstOp)->decltype(firstOp(argument)){returnfirstOp(argument);}templateautoWhichOp2(Aargumen

c++ - 函数的模糊引用/值版本

考虑以下函数原型(prototype):voidRemove(SomeContainer&Vec,conststd::size_tIndex);SomeContainerRemove(SomeContainerVec,conststd::size_tIndex);第二个是根据第一个实现的。也就是说,除了一个是按引用传递而另一个是按值传递外,它们在所有方面的功能都是相同的。但是,GCC表示在这种情况下这些是不明确的,即使第一种形式是唯一不返回值的形式:Remove(SomeContainer,123);是否有任何解决方法,或者我是否必须为每个表单提供不同的名称?

c++ - 如何使用导出相同函数名称的 2 个 C 库

这个问题在这里已经有了答案:关闭13年前。重复以下问题:Cfunctionconflict你好,在我当前的项目中,我必须使用某种接口(interface)库。函数名由这个接口(interface)给出,这个函数做什么是开发者选择的。据我所知,一个项目应该使用这个函数,当涉及到编译时,你选择lib和它的功能。我尝试做的是通过包装另一个并在我的函数中调用它来同时使用现有的库和我的库:其他库:intfunction1(inta){//dosomething}我的库:intfunction1(inta){//mycodehereotherlib::function1(a);}问题是我无权访问其

c++ - QObject 继承 Ambiguous Base

我有一个简单的类,它在我的程序获得和失去焦点时停止和启动计时器,但它给出了错误,即QObject在每个信号槽连接上都是MyApp的模糊基础。相关代码如下:classMyApp:publicQApplication,publicQObject{Q_OBJECT...}这是我的(凌乱的)Main.cpp:#include#include"qmlapplicationviewer.h"#include#include#include#include#include"timecontrol.h"#include"scorecontrol.h"#include"Retry.h"#include#

c++ - Visual Studio 2017 : ambiguous symbol size_t in linux projects

在VisualStudio2017中创建Linux项目并在源代码中插入usingnamespacestd;时,如下所示:#include#includeusingnamespacestd;intmain(){size_ti=1;strings=to_string(i);coutVS下划线size_t说是有歧义的符号。如果我按F12(转到定义),它会为我提供两个定义位置:来自stddef.h(C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\Linux\include\usr\include\x86_64-linux-gnu\5\incl

c++ - 消除对采用 std::functions 的函数的调用的歧义

下面的代码不能在gcc4.5上编译,因为对foo的调用不明确。消除歧义的正确方法是什么?#include#includeusingnamespacestd;voidfoo(std::functiont){t(1,2);}voidfoo(std::functiont){t(2);}intmain(){foo([](inta,intb){cout 最佳答案 最好的方法是显式创建一个std::function正确类型的对象,然后将该对象传递给函数:std::functionfunc=[](inta,intb){cout或内联:foo(st

c++ - 错误 : ambiguates old declaration ‘double round(double)’

/usr/include/i386-linux-gnu/bits/mathcalls.h:311:1:error:ambiguatesolddeclaration‘doubleround(double)’g.cpp:Infunction‘intround(double)’:g.cpp:14:24:error:newdeclaration‘intround(double)’/usr/include/i386-linux-gnu/bits/mathcalls.h:311:1:error:ambiguatesolddeclaration‘doubleround(double)’#includ

c++使用int和char *重载构造函数

我尝试使用int和char*重载构造函数。然后在调用0时有歧义。是否有任何解决方法/解决方案?CBigInt(unsignedint);CBigInt(constchar*);问题出在0线上:CBigInta;//somemorecodea*=0;感谢您的回答。 最佳答案 使构造函数之一显式。只有在传递的类型完全匹配时才会使用它。CBigInt(unsignedint);explicitCBigInt(constchar*); 关于c++使用int和char*重载构造函数,我们在Stac

c++ - 不明确的模板实例化

有人可以解释这里的歧义吗?templatestructthing;templatestructthing{thing(int&,Rest&...){}};templatestructthing{thing(First&,Rest&...){}};intmain(){intmyint;charmychar;thingt(myint,mychar);} 最佳答案 如果你专注于int而不是int&它会起作用templatestructthing;templatestructthing{thing(int&,Rest&...){}};tem

c++ - "Ambiguous conversion sequence"- 这个概念的目的是什么?

在N465916.3.3.1隐式转换序列中说10Ifseveraldifferentsequencesofconversionsexistthateachconverttheargumenttotheparametertype,theimplicitconversionsequenceassociatedwiththeparameterisdefinedtobetheuniqueconversionsequencedesignatedtheambiguousconversionsequence.Forthepurposeofrankingimplicitconversionsequen