问题标签 [unqualified-name]

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 投票
5 回答
4538 浏览

java - Java中的不合格名称

我们编程课上的老师在谈论“不合格的名字”,但我想知道它们到底是什么。

我怀疑诸如方法名称之类的东西是不合格的,但我不确定。

有谁能给我解释一下吗?我需要知道这一点,因为我需要解释 Java 以何种方式看起来是不合格的名称。

0 投票
0 回答
176 浏览

c++ - C++ non-qualified lookup

I have the following code:

The idea is to imitate the behavior of gtest operator<< & PrintTo, so that one could overload behaviour for some std classes, which can not be done through ADL since adding anything to std namespace is not allowed. However, if I try to do it with a usual function f(), then the overload for f(mystd::A()) is considered to be defined too late (if one comments the template definition of f() the gcc gives note: ‘int f(const mystd::A<int>&)’ declared here, later in the translation unit)

The question is why the behaviour is different for operator-() and f()?

0 投票
1 回答
4325 浏览

c++ - 错误:'const'之前的预期不合格ID

我已经看到了一些关于这个错误的问题,但是我没有太多用 C++ 创建类的经验,所以我实际上并不明白答案的含义。我还应该指出,我没有编写此代码。

我收到标题中所述的错误,我相信它来自这个头文件,但我不知道错误的含义以及如何修复它。

这是文件:

和完整的错误:

如果有人可以向我解释这意味着什么以及发生了什么,我将非常感激,谢谢!

0 投票
2 回答
83 浏览

c++ - 在范围内定义的函数,但编译器抱怨它超出范围

我尝试为两个 2x2 矩阵实现 strassens 算法,以制作递归矩阵乘法算法,但是该实现无法编译,给我如下错误:

“未在此范围内声明 strassen”和“不合格 ID”

这是代码:

你能告诉我为什么我得到编译时错误。我还需要知道如何为 2D 数组分配空间,因为一旦函数退出返回垃圾值malloc,我当前的实现就会超出范围。C

0 投票
1 回答
47 浏览

c++ - 在我看来,在 [basic.lookup.argdep]/3 的示例中调用 g(parm, 1) 有两个候选函数

[basic.lookup.argdep]/3中的示例:

对于调用g(parm, 1),我们在集合X中具有全局范围内的声明void g(NS::T, float);。AFAICT,我们在集合Yvoid g(T, int);中也有namespace中的声明,这是 typeNS参数的关联命名空间。因此,如果我没记错的话,这两个声明是重载解决方案的候选者。那么,与命名空间中的声明相比,全局范围内的声明是否更受欢迎?为什么?我非常感谢标准的引用作为答案。parmNS::TNS

0 投票
1 回答
187 浏览

c++ - 限定名称的重载解析

考虑这个函数调用:

11.3.1.1.1,第 3 段 [over.call.func] ( N4778 ) 涵盖了这种情况:

在非限定函数调用中,名称不由->or.运算符限定,并且具有更通用的primary-expression 形式。按照函数调用中名称查找的正常规则,在函数调用的上下文中查找名称...

在这里,foo::bar是一个不合格的名称,因为它没有被->or.限定。所以本段适用。现在,短语“在上下文中查找”的含义在 6.4 第 2 段 [basic.lookup] 中进行了解释:

“在表达式的上下文中查找”的名称在找到表达式的范围内被查找为非限定名称

但是, 是名称查找领域中foo::bar的限定名称。也就是说,这个组合的段落基本上就是说,限定名是按照非限定名查找规则来查找的。但是,我不认为不合格的名称查找能够递归地进入更窄的范围,即to 。这是缺陷吗?foo::barfoobar

0 投票
1 回答
63 浏览

c++ - C ++不合格名称查找:不同cpp中的不同结构大小导致运算符new分配的内存少于构造函数进程?

这是示例:

Main.cpp

MooFoobar.h

MooTestFoobar.h

FoobarUser.h

FoobarUser.cpp

所以这里发生了什么:根据包含的顺序,不合格的名称被解析为不同的类型,FoobarUser.cpp我们得到 size 64Main.cpp我们得到 size 32。不仅sizeof不同 -operator new以不正确的 ( 32) 大小调用,而且构造函数将初始化 的大小64,这会导致内存损坏。

在 clang 和 msvc 中,这个程序的结果是:

这听起来很可疑,基本上意味着如果存在名称冲突,则不合格的名称是不可行的,因为根据包含顺序,它可能会导致本质上是不正确的程序。

但是我在 C++ std 中找不到任何可以说明任何无效/格式错误的代码的点。谁能帮我?

它真的是标准而不是一些复杂的大规模编译器问题(尽管我真的看不出编译器如何解决这种情况)?

0 投票
3 回答
77 浏览

c++ - 如何解决不合格名称查找问题

我有以下简化程序:

现在的问题是,是否有任何方法可以简化基类类型的完全重复。我的原始代码是这样的:

如您所见,所有模板参数的完全重复并​​不是很“好”。有机会解决吗?

如果上面的代码没有依赖模板参数(将单行 1.))从上面的示例更改为:

该类变得非常简单并且更易于维护:

作为对潜在问题的参考,我已经发现了那个问题

模板和继承的“未在此范围内声明”错误

但不知道简化我的代码。

0 投票
1 回答
96 浏览

c++ - Mongoose - 包含标准 C++ 库文件时出错

我正在使用 mongoose 在 C++ 中构建 HTTP 服务器,当我尝试在程序中包含其他文件时收到错误消息:

每当我尝试在我的程序中包含以下文件时,都会发生这种情况:

我试图通过注释掉其中一些文件来将其缩小到导致问题的文件之一,但似乎其中任何一个文件都会导致错误。有趣的是, string.h 不会导致错误。

0 投票
2 回答
804 浏览

c++ - 为什么这个模板函数的行为不像预期的那样?

我正在阅读有关模板函数的内容,但对这个问题感到困惑:

如果我不写,结果是一样的template void g<double>(double);

我认为g<double>应该在之后实例化f(double),因此对fin的调用g应该调用f(double)。令人惊讶的是,它仍然调用f(int). g<double>谁能帮我理解这一点?


阅读答案后,我弄清楚了我的困惑到底是什么。

这是一个更新的示例。除了我添加了一个专业化之外,它几乎没有变化g<double>

随着用户的专业化,g(1.0)行为符合我的预期。

编译器是否不应该在同一个地方自动执行相同的实例化g<double>(或者甚至在之后main(),如The C++ Programming Language , 4th edition 的第 26.3.3 节所述)?