无法识别的继承函数

比利

在Visual C ++ 2010上运行此C ++源代码:

class B{
public:
    virtual void f(int a){}
    virtual void f(){}
};
class A:public B{
public:
    virtual void f(int a){}
};
int main(){
A a;
a.f();
return 0;
}

导致以下错误:

IntelliSense: too few arguments in function call

换句话说,似乎void f()没有继承?

问题是什么?

4个

似乎void f()没有继承?

名称F IN A级阴影的B名称F IN B.你仍然可以访问FOO()这样

A a;
a.B::f();

另一种选择是在A的范围内重新声明B的函数foo:

class A : public B{
public:

    virtual void f(int a) {}
    using B::foo;
};

C ++标准n3337 § 10.2会员名称查找

1)成员名称查找确定类作用域中名称(id-expression)的含义(3.3.7)。名称查找可能导致歧义,在这种情况下,程序格式不正确。对于id表达式,名称查找始于该类的类范围。对于限定ID,名称查找始于嵌套名称说明符的范围。名称查找发生在访问控制之前(3.4,第11条)。

2)以下步骤定义了在类范围C中成员名称f的名称查找结果。

3)C中f的查找集称为S(f,C),它由两个组件集组成:声明集,一组名为f的成员;和子对象集,一组子对象,在这些子对象中找到了这些成员的声明(可能包括using-declaration)。在声明集中,using-declaration被其指定的成员替换,类型声明(包括注入的类名)被其指定的类型替换。S(f,C)计算如下:

4)如果C包含名称为f的声明,则声明集包含C中声明的f的每个声明,该声明满足在其中进行查找的语言构造的要求。[注意:例如,在详细类型说明符(3.4.4)或基本说明符(条款10)中查找名称时,将忽略所有非类型声明,而在嵌套名称说明符中查找名称(3.4.3)忽略函数,变量和枚举器声明。作为另一个示例,在using-declaration(7.3.3)中查找名称包括一个类或枚举的声明,该声明通常会被同一范围内该名称的另一个声明隐藏。—结束说明]如果结果声明集不为空,则子对象集包含C本身,并且计算完成。

5)否则(即C不包含f的声明或结果声明集为空),S(f,C)最初为空。如果C具有基类,则在每个直接基类子对象Bi中计算f的查找集,并将每个这样的查找集S(f,Bi)依次合并为S(f,C)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法识别的继承函数

来自分类Dev

类继承:编译器无法识别的类的构造函数和成员函数

来自分类Dev

Matlab中无法识别的函数或变量

来自分类Dev

无法识别的作者

来自分类Dev

无法识别的情况

来自分类Dev

Python-使用无法识别的参数创建函数

来自分类Dev

javascript - 回调中无法识别的函数

来自分类Dev

“ ValueError:无法识别的标记样式'hline'”。Matplotlib plot()和scatter()函数无法识别的一堆标记

来自分类Dev

Behat“无法识别的选项”

来自分类Dev

Valgrind无法识别的指令

来自分类Dev

Rails无法识别的路径

来自分类Dev

无法识别的JavaScript语法

来自分类Dev

我无法识别的错误

来自分类Dev

无法识别的元素“ providerOption”

来自分类Dev

无法识别的属性'targetFramework

来自分类Dev

setarch无法识别的架构

来自分类Dev

SQLiteException:无法识别的令牌:“ \”:

来自分类Dev

postgres:无法识别的服务

来自分类Dev

Avconv无法识别的选项

来自分类Dev

UITableView 无法识别的 NumberOfRowsInSection

来自分类Dev

Python 3:使用os.path.isfile函数无法识别的现有文件

来自分类Dev

使用脚本将公式添加到Google工作表时无法识别的函数

来自分类Dev

如何识别无法识别的选择器和无法识别的选择器?

来自分类Dev

MSVC 无法识别继承模板类的模板类的“直接”基类构造函数

来自分类Dev

C ++无法识别的转义序列

来自分类Dev

Visual Studio 2013无法识别的javascript

来自分类Dev

.zshrc $-上无法识别的条件

来自分类Dev

NSObject的子类中无法识别的CGRect

来自分类Dev

Powershell中无法识别的令牌错误