问题标签 [name-lookup]
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++ - GCC 问题:使用依赖于模板参数的基类成员
以下代码不能用 gcc 编译,但可以用 Visual Studio 编译:
我得到错误:
test.cpp:在成员函数'void B::bar()'中:
test.cpp:11:错误:“foo”未在此范围内声明
但它应该是!如果我bar
改为
然后它会编译,但我认为我不必这样做。GCC 在此处遵循的 C++ 官方规范中有什么内容,还是只是一个怪癖?
c++ - 对基类成员数据的派生模板类访问
这个问题是对这个线程中提出的问题的推进。
使用以下类定义:
在访问模板类基类的成员时,似乎我必须始终使用Bar<T>::_foo_arg
. 有没有办法避免这种情况?'using' 语句/指令能否在模板类方法中发挥作用以简化代码?
编辑:
通过使用 this-> 语法限定变量来解决范围问题。
c++ - 将“typedef”从“模板”的基类传播到派生类
我正在尝试定义仅包含 typedef 的基类。
为什么在 BI 中收到 Vec_t 无法识别的错误,我需要显式编写它?
c++ - 为什么 ADL 找不到函数模板?
C++ 规范的哪一部分限制依赖于参数的查找在关联的命名空间集中查找函数模板?换句话说,为什么main
下面的最后一个调用无法编译?
c++ - 错误的私有基类无法访问?
使用 g++ 4.2.1 编译此代码:
我得到:
但是,如果我将wrap_rep
类更改为使用ST
:
它编译得很好。或者,如果我将原始代码更改为:
它也编译得很好。对我来说,原始代码看起来很好。这是一个 g++ 错误吗?如果不是,那为什么使用模板有效?而且,对于另一种情况,为什么有::S
必要?
c++ - 多继承模板类
我的第一个想法是,上面的代码应该没问题,因为 A 类将包含 2 个重载的提交函数,它们将接受 messageA 和 messageB 对象。
但是,编译器给了我以下错误:
我可以知道为什么有一个模棱两可吗?对于第一次提交调用,我想调用 messageA 版本不是很明显吗?对于第二次提交调用,我想调用 messageB 版本?
c++ - Name lookup Clarification
$10.2/4- "[ Note: Looking up a name in an elaborated-type-specifier (3.4.4) or base-specifier (Clause 10), for instance, ignores all nontype declarations, while looking up a name in a nested-name-specifier (3.4.3) ignores function, variable, and enumerator declarations."
I have found this statement to be very confusing in this section while describing about name lookup.
My questions:
Is my understanding of the rules correct?
Why
::S
on the line doing new treated automatically to mean structS
, whereas in the last line::S
means the functionsS
in the global namespace.Does this point to an ambiguity in the documentation, or is it yet another day for me to stay away from C++ Standard document?
c++ - 名称查找中的重载分辨率/歧义(哪一个)
$7.3.3/14 (C++03)
'f' 中代码中的注释表明,可以预期 'B::x' 或 'C::x' 之间存在歧义。
但是,在使用 g++(ideone) 或 Comeau 编译时,错误会略有不同。这些错误不是表示 B::x 或 C::x 中的歧义,而是表示 A 是 D 的歧义基这一事实
prog.cpp:在函数'int f(D *)'中:prog.cpp:16:错误:'A'是'D'的模糊基数</p>
和
“ComeauTest.c”,第 21 行:错误:基类“A”不明确 return d->x(); // 模棱两可:B::x 或 C::x
按照 $10.2 中的名称查找规则,我觉得代码片段中的注释并不真正正确。该错误确实首先与基类“A”的歧义有关,而不是其他任何事情(例如重载决议中的歧义)。有什么想法吗?
c++ - 覆盖非常量虚拟方法是否隐藏了 const 重载?
考虑:
(我正在使用 GCC。)
所以 f() 的 const 版本似乎隐藏在 C 中。这对我来说很有意义,但它是标准规定的吗?
c++ - C ++中的距离计算错误
我有以下代码,但这里是错误列表