问题标签 [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.

0 投票
1 回答
518 浏览

c++ - 运算符重载clang++和g++不同的输出

通过这个示例程序,我观察到 g++ 和 clang 中的不同行为

富.h:

Foo.cpp

主文件

用 clang++ 和 g++ 编译会产生不同的结果:

哪一个是正确的,为什么?

0 投票
4 回答
454 浏览

c++ - C++ STL 找不到嵌套类的比较器

我希望这段代码可以工作,但它无法用 GCC 编译。如果您将内部类取出,它会编译。

GCC 4.4 有这样的说法:

GCC 4.7 打印了更多的东西,包括上面的,以这个结尾:

我愿意相信它不是格式良好的 C++,但为什么不呢?

0 投票
3 回答
404 浏览

c++ - gcc 编译器未显示注入名称的类模板的正确错误

最近,我在读这本书:C++ templates: the complete guideDavid Vandevoorde 和 Nicolai M. Josuttis 写的。

特别是关于模板解析引用的书 pp 126。

类模板也有注入类名,但是,它们比普通注入类名更奇怪:它们后面可以跟模板参数(在这种情况下它们是注入类模板名称),但是如果它们后面没有模板参数,它们代表以参数为参数的类(或者,对于部分特化,它的特化参数)。

书中相关代码除外,如下:

上面的代码示例试图解释整个引用的段落。

我在 gcc 4.5.3 中编译了上面的代码,它输出:

因此,我有以下问题:

  1. 为什么编译器会生成完全不同的错误消息?书b上说没问题,但 gcc 给出了错误;同时,没有检测到书中列出的其他错误?为什么,这可能是书中的编译器错误或错误?
  2. 是什么injected class names意思?我如何识别哪些名称是injected class names哪些不是?
  3. 为什么C*a一样C<T>* a?我尝试用 替换C*aC<T>* a没有报错,那么是?C* a的简写C<T>* a

非常感谢!

0 投票
1 回答
169 浏览

c++ - 使用 `stdio.h` 函数查找模板和名称

我正在尝试PCL在 32 位 Windows 7 中使用MinGW. 在构建outofcore模块时,我收到了几条错误消息_fseeki64

octree_disk_container.h文件中,有一个

我已经测试(生成一个#error)并WIN32在处理文件时定义。_fseeki64当这个小测试程序编译时,编译器似乎可以使用:

如果我定义_fseeki64fseeko64错误消失并且模块编译,但我不确定行为是否与fseeko预期的行为相同fseeki

那么,我该怎么做才能_fseeki64在这种情况下使用呢?也许声明一个新的基类,把它#define放在那里然后像这样调用它Base<T>::_fseeki64?(从这里得到想法)

你觉得呢?你有没有什么想法?

0 投票
1 回答
83 浏览

c++ - 虚拟方法的行为与多重继承不同

为什么这行得通

这在调用访问方法时抱怨歧义

这也显示了同样的问题:

不知何故,它看起来像多重继承与虚函数签名混淆......

使用 gcc 版本 4.8.0 20130411(预发布)

0 投票
1 回答
483 浏览

c++ - 这是 GCC 中的错误吗?

编辑:这不是一个错误,只是我不知道模板化基类中的依赖名称查找(MSVC“有用地”解决了没有错误)。


不久前我写了一个仿函数实现,以及一个使用它的简单“事件”包装器。它在 MSVC 下编译得很好,但是 GCC 给出了一个关于基类中的成员变量的错误subscribers,没有被声明;更改subscribersthis->subscribers解决问题(!)。它似乎只发生在奇怪重复的模板模式和部分模板专业化中。

简化的源代码(对不起,令人费解的模板用法......):

我在某处调用未定义的行为吗?我的语法有什么错误吗?这真的是 GCC 中的错误吗?它可能是一个已知的错误吗?任何见解将不胜感激!

更多细节:使用g++ -std=c++11 main.cpp. 我正在使用 GCC 版本 4.7.2。确切的错误信息:

0 投票
1 回答
87 浏览

c++ - 我怎样才能从它的多重继承基础中获得一个类地址?

我在公司中使用了第三方库。在其中,我需要的一些类定义如下:

在这里,我需要在 Foo 和它的所有基类之间获得偏移量。所以我这样编码:

在VC2010和VC2012中,一切正常。

但在 GCC 4.7.3 中,会有一个“Ambiguous base”编译错误。

我不得修改声明的任何代码。我怎样才能获得 Foo 和最后一个“公共 A”之间的偏移量?

0 投票
1 回答
94 浏览

c++ - 稍后定义的重载函数的名称查找

当依赖稍后定义的函数时,我注意到有关函数查找的奇怪行为:

输出:

出于某种原因,我希望使用fooinsidebar来找到它下面的重载。将 的重载foo移到上面bar使输出成为所需的int:0(或只是编写一个声明)。

同样的行为似乎不适用于重载二元运算符:

输出:

我有两个问题,第一个是:为什么会有这样的行为,为什么运算符重载会有所不同?第二个是:如果我有一个命名函数(比如我对 的使用foo),有没有办法编写一个函数bar来发现foo稍后在翻译单元中声明的重载 s?

0 投票
0 回答
346 浏览

c++ - 如何在钻石继承中访问模板父基类的受保护成员变量

我在一个更大的项目中有一个更复杂的以下代码版本。

每当我尝试编译上述代码时,都会出现以下错误。

我知道在这种情况下,GChild1 中有几个同名的变量:Base::var 到 Child1、Base::var 到 Child2 和 Base::var 到 GChild1。我也明白我可以通过更具体和使用范围运算符来解决这个问题。但是,我不明白为什么在 GChild1 的定义中添加“使用”行不能解决此问题。例如

这会产生相同的错误。我看到有人问过类似的问题,但我觉得它们要么不同到足以保证提出一个新问题,要么它们的答案似乎不适合我的需要。我很感激在解决这个问题和理解解决方案方面的任何指导。

0 投票
2 回答
257 浏览

c++ - 如果存在具有不同参数类型的重载,则从全局命名空间中找不到函数

如果我们在全局命名空间中有一个函数,并且在另一个命名空间中有一个具有不同参数类型的重载,那么 C++Builder 编译器似乎无法从全局命名空间中找到该函数。

C++Builder 给出以下错误:

Visual C++ 2012 编译它没有错误。

我知道即使存在具有相同名称和不同参数类型的函数,也应该找到全局命名空间中的函数。

我是否遗漏了什么,或者这是 C++Builder 中的一个错误?