问题标签 [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++ - 运算符重载clang++和g++不同的输出
通过这个示例程序,我观察到 g++ 和 clang 中的不同行为
富.h:
Foo.cpp
主文件
用 clang++ 和 g++ 编译会产生不同的结果:
哪一个是正确的,为什么?
c++ - C++ STL 找不到嵌套类的比较器
我希望这段代码可以工作,但它无法用 GCC 编译。如果您将内部类取出,它会编译。
GCC 4.4 有这样的说法:
GCC 4.7 打印了更多的东西,包括上面的,以这个结尾:
我愿意相信它不是格式良好的 C++,但为什么不呢?
c++ - gcc 编译器未显示注入名称的类模板的正确错误
最近,我在读这本书:C++ templates: the complete guide
David Vandevoorde 和 Nicolai M. Josuttis 写的。
特别是关于模板解析引用的书 pp 126。
类模板也有注入类名,但是,它们比普通注入类名更奇怪:它们后面可以跟模板参数(在这种情况下它们是注入类模板名称),但是如果它们后面没有模板参数,它们代表以参数为参数的类(或者,对于部分特化,它的特化参数)。
书中相关代码除外,如下:
上面的代码示例试图解释整个引用的段落。
我在 gcc 4.5.3 中编译了上面的代码,它输出:
因此,我有以下问题:
- 为什么编译器会生成完全不同的错误消息?书
b
上说没问题,但 gcc 给出了错误;同时,没有检测到书中列出的其他错误?为什么,这可能是书中的编译器错误或错误? - 是什么
injected class names
意思?我如何识别哪些名称是injected class names
哪些不是? - 为什么
C*a
一样C<T>* a
?我尝试用 替换C*a
,C<T>* a
没有报错,那么是?C* a
的简写C<T>* a
?
非常感谢!
c++ - 使用 `stdio.h` 函数查找模板和名称
我正在尝试PCL
在 32 位 Windows 7 中使用MinGW
. 在构建outofcore模块时,我收到了几条错误消息_fseeki64
:
在octree_disk_container.h
文件中,有一个
我已经测试(生成一个#error
)并WIN32
在处理文件时定义。_fseeki64
当这个小测试程序编译时,编译器似乎可以使用:
如果我定义_fseeki64
为fseeko64
错误消失并且模块编译,但我不确定行为是否与fseeko
预期的行为相同fseeki
。
那么,我该怎么做才能_fseeki64
在这种情况下使用呢?也许声明一个新的基类,把它#define
放在那里然后像这样调用它Base<T>::_fseeki64
?(从这里得到想法)
你觉得呢?你有没有什么想法?
c++ - 虚拟方法的行为与多重继承不同
为什么这行得通
这在调用访问方法时抱怨歧义
这也显示了同样的问题:
不知何故,它看起来像多重继承与虚函数签名混淆......
使用 gcc 版本 4.8.0 20130411(预发布)
c++ - 这是 GCC 中的错误吗?
编辑:这不是一个错误,只是我不知道模板化基类中的依赖名称查找(MSVC“有用地”解决了没有错误)。
不久前我写了一个仿函数实现,以及一个使用它的简单“事件”包装器。它在 MSVC 下编译得很好,但是 GCC 给出了一个关于基类中的成员变量的错误subscribers
,没有被声明;更改subscribers
为this->subscribers
解决问题(!)。它似乎只发生在奇怪重复的模板模式和部分模板专业化中。
简化的源代码(对不起,令人费解的模板用法......):
我在某处调用未定义的行为吗?我的语法有什么错误吗?这真的是 GCC 中的错误吗?它可能是一个已知的错误吗?任何见解将不胜感激!
更多细节:使用g++ -std=c++11 main.cpp
. 我正在使用 GCC 版本 4.7.2。确切的错误信息:
c++ - 我怎样才能从它的多重继承基础中获得一个类地址?
我在公司中使用了第三方库。在其中,我需要的一些类定义如下:
在这里,我需要在 Foo 和它的所有基类之间获得偏移量。所以我这样编码:
在VC2010和VC2012中,一切正常。
但在 GCC 4.7.3 中,会有一个“Ambiguous base”编译错误。
我不得修改声明的任何代码。我怎样才能获得 Foo 和最后一个“公共 A”之间的偏移量?
c++ - 稍后定义的重载函数的名称查找
当依赖稍后定义的函数时,我注意到有关函数查找的奇怪行为:
输出:
出于某种原因,我希望使用foo
insidebar
来找到它下面的重载。将 的重载foo
移到上面bar
使输出成为所需的int:0
(或只是编写一个声明)。
同样的行为似乎不适用于重载二元运算符:
输出:
我有两个问题,第一个是:为什么会有这样的行为,为什么运算符重载会有所不同?第二个是:如果我有一个命名函数(比如我对 的使用foo
),有没有办法编写一个函数bar
来发现foo
稍后在翻译单元中声明的重载 s?
c++ - 如何在钻石继承中访问模板父基类的受保护成员变量
我在一个更大的项目中有一个更复杂的以下代码版本。
每当我尝试编译上述代码时,都会出现以下错误。
我知道在这种情况下,GChild1 中有几个同名的变量:Base::var 到 Child1、Base::var 到 Child2 和 Base::var 到 GChild1。我也明白我可以通过更具体和使用范围运算符来解决这个问题。但是,我不明白为什么在 GChild1 的定义中添加“使用”行不能解决此问题。例如
这会产生相同的错误。我看到有人问过类似的问题,但我觉得它们要么不同到足以保证提出一个新问题,要么它们的答案似乎不适合我的需要。我很感激在解决这个问题和理解解决方案方面的任何指导。
c++ - 如果存在具有不同参数类型的重载,则从全局命名空间中找不到函数
如果我们在全局命名空间中有一个函数,并且在另一个命名空间中有一个具有不同参数类型的重载,那么 C++Builder 编译器似乎无法从全局命名空间中找到该函数。
C++Builder 给出以下错误:
Visual C++ 2012 编译它没有错误。
我知道即使存在具有相同名称和不同参数类型的函数,也应该找到全局命名空间中的函数。
我是否遗漏了什么,或者这是 C++Builder 中的一个错误?