问题标签 [ambiguity]

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 投票
4 回答
2972 浏览

c++ - 覆盖合格的虚拟方法

我有多个父母的 C++ 课程;每个父级定义一个具有通用名称但用途不同的函数:

如果是这样,我将没有问题 - 我可以使用 using语句解决歧义,并且可以使用基类名称和范围解析运算符来选择调用哪个。

不幸的是,派生类需要同时覆盖它们:

这不起作用,不是因为它引入了新的歧义(尽管可能),而是因为

“错误 C3240:‘myFunc’:必须是‘BaseA’的非重载抽象成员函数”

“错误 C2838:成员声明中的非法限定名”

在不同的情况下,我可能只是重命名方法,或者按照编译器的建议将它们设为纯虚拟。然而,类层次结构和一些外部问题使得第一个选项极其困难,而第二个选项则不可能。

有人有建议吗?为什么限定符只允许用于纯虚方法?有什么方法可以同时覆盖虚拟方法并解决歧义?

0 投票
4 回答
2215 浏览

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

我尝试用intand重载构造函数char *。然后与 通话有歧义0。有什么解决方法/解决方案吗?

问题在于0

谢谢回答。

0 投票
8 回答
1907 浏览

c# - 为什么 .Net / C# 不能理解具有同名属性的接口继承?

考虑以下类和接口:

看起来很简单,对吧?现在考虑以下程序:

看起来不错,但它不会编译。它给了我一个歧义异常:

截图编译器

为什么 C# 不能解决这个问题?从架构的角度来看,我正在做的事情是不是很疯狂?我试图了解原因(我知道可以通过强制转换来解决)。

编辑

当我介绍 interface 时出现了问题C。当我使用时MyClass : A, B,我完全没有问题。

最终的

刚刚完成了一个关于这个主题的博客:接口歧义和隐式实现

0 投票
3 回答
1198 浏览

java - 在 Java 中调用模糊重载的构造函数

我刚刚看到这个 C# 问题,想知道在 Java 中是否会发生类似的事情。它可以,与

通话

是模棱两可的,我看不出如何解决它。有没有?

0 投票
1 回答
2065 浏览

c++ - 没有分配 std::list 迭代器

抱歉,问题标题含糊不清,但我在这里有这些 typedef:

让我们说一个这样的类:

我还有一个复制/赋值构造函数,因为我正在存储迭代器(这似乎是个坏主意),而问题就在那里。

一旦我尝试使用“那个”(另一个 foo)之一分配关键帧,我就会收到看起来像模棱两可问题的错误。

二进制 '=' :未找到采用 'std::_List_const_iterator<_Mylist>' 类型的右侧操作数的运算符(或没有可接受的转换)

附加信息:

是什么导致了这种奇怪的行为?我怀疑我使用迭代器作为状态的坏风格......但我不知道除了保持指针之外我还能做什么。

0 投票
4 回答
6326 浏览

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

考虑以下函数原型:

第二个是按照第一个来执行的。也就是说,除了一个是按引用传递而另一个是按值传递之外,它们在各个方面在功能上都是相同的。

然而,GCC 说在这种情况下这些是模棱两可的,即使第一种形式是唯一不返回值的形式:

是否有任何解决方法,或者我必须为每个表单提供不同的名称?

0 投票
4 回答
2313 浏览

c++ - 避免过度使用命名空间

我的库使用了几个嵌套的命名空间,布局如下:

“实用程序”命名空间包含对每个类的有用扩展,这些扩展不保证包含在实际类本身中。

“库名称”命名空间是必要的,因为它避免了与其他库的广泛冲突,“实用程序”命名空间是必要的,以避免由此类事物引起的歧义类型,并且其中的“类名”命名空间避免名称之间的冲突为类似类编写的实用程序。

尽管如此,这在实践中仍然是一个巨大的麻烦。以以下为例:

这让我觉得我做错了什么。有没有更简单的方法来让事情变得井井有条、直观且明确?

0 投票
8 回答
181 浏览

c - 数字比较中的歧义(在 C 中)?

我对 C 编程不太熟悉(我只用该语言做过几个小项目),但是,我的教授今天谈到了它的行为,这让我有点困惑。

他说的是这段代码有时根本不会打印任何东西(我完全复制了板上的内容,我相信这是 C 的伪代码,因为“打印”不在 C 中):

基本上,您可以在不满足这些条件的那些 int 变量中存储一些东西(_ __ _显然不是实际代码,它只是表示存在某些东西)。它不一定需要是一些填补这些空白的整数......它可以是世界上的任何东西(并且可能在这段代码之前发生了一些事情)。

是什么可以填补这些空白而不会产生任何结果,为什么?

ps - 它与溢出、未定义的行为、越界错误或类似情况有关

pps - 我很难相信这位教授是错误的。他比我接触过的任何人都更了解编程。我相信在某些情况下这是真的。

0 投票
3 回答
223 浏览

c++ - 区分引用传递和值传递

引用传递函数通常如何与值传递函数区分开来?例如:

这两个功能是模棱两可的;其中之一必须重命名或完全删除。

如何避免这种情况?一种形式是否应该优于另一种形式?还是有任何通用的命名准则来区分它们?

0 投票
3 回答
1558 浏览

c++ - 上下文敏感性与歧义

我对上下文敏感性和歧义如何相互影响感到困惑。

我认为正确的是:

歧义:

模棱两可的文法会导致使用左派生或右派生构造多个分析树。所有可能的语法都是模棱两可的语言是模棱两可的语言。

例如,C++ 是一种模棱两可的语言,因为 x * y 总是可以表示两种不同的东西,如下所述:为什么不能用 LR(1) 解析器解析 C++?.

上下文敏感性:

上下文相关文法具有规则,其中这些规则的左侧可能包含(非)终结符号,除了在不同类型文法的所有规则中所需的一个非终结符之外。这意味着您不能在下降时仅替换非终结符。相反,您必须先查看周围的非终结符。


现在困扰我的是或多或少说上下文敏感的解析器可以解析像 x * y 这样的歧义的语句。例如,在上面链接的问题中,声明“......一个 [在创建语法树时装饰语法树] 的解析器不是上下文无关的,而 LR 解析器(纯解析器)是上下文无关的。” 在我看来,这意味着上下文敏感的解析器(与上下文无关的解析器相反?)可以做到这一点。另一个例子是 C++ 语法是否对上下文敏感?这个问题的答案是“是的......”。同样在这里:什么是模棱两可的上下文无关语法?

我看不出这种 C++ 歧义与上下文敏感性有什么关系。我认为没有任何上下文相关的语法可以处理这种歧义。例如,如果您采用 Typedef、<other>*、PointerDeclaration -> Ident "*" Ident 之类的虚构规则

那么您仍然无法确定(通过纯解析)在 Typedef 期间是否使用了具体的第一个 Ident(例如“x”)(例如 typedef double x;)。


因此,是否有可能在链接的问题中使用术语“上下文敏感性”,尽管其含义很简单,例如上下文相关性(例如,需要比简单解析器提供的更多信息)。或者“真实的”上下文敏感性”和歧义之间是否存在任何联系。

编辑更具体的问题:上下文无关语法中是否存在任何可以通过使用上下文相关语法来处理的歧义。这个问题出现在我身上是因为在链接的问题中,听起来 C++ 的歧义有时被称为上下文敏感问题。

Edit2附加信息:《计算机系统》一书在第 346 页上指出,诸如具有相同数量的实际参数和形式参数之类的要求可以通过上下文相关的语法来表达。但这非常麻烦,因为您需要很多复杂的规则。但也许这也适用于前面提到的 C++ 歧义。所以我们有这样的规则

"Typedef double x", <other>*, PointerDeclaration -> "x" "*" Ident

当然,这样的规则是非常有限的,你需要大量的资金来表达每一种可能性。如果(理论上)上下文无关的歧义可以用上下文相关规则的使用来代替,至少这可能是解决问题的一种方法