首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的派生类找不到基类的类型别名?

派生类找不到基类的类型别名可能是因为以下几个原因:

  1. 命名空间问题:在派生类中使用基类的类型别名时,需要确保基类的类型别名在派生类所在的命名空间中是可见的。如果基类的类型别名定义在另一个命名空间中,派生类就无法直接访问到。
  2. 基类未正确声明类型别名:如果基类没有正确声明类型别名,派生类就无法使用基类的类型别名。请确保基类中正确声明了类型别名,并且在派生类中可以访问到。
  3. 派生类未正确继承基类:如果派生类没有正确继承基类,就无法使用基类的类型别名。请确保派生类正确继承了基类,并且可以访问到基类的成员。
  4. 类型别名定义错误:如果基类的类型别名定义有误,派生类就无法正确使用。请检查基类的类型别名定义,确保没有语法错误或逻辑错误。

总结起来,要解决派生类找不到基类的类型别名的问题,需要确保基类的类型别名在派生类所在的命名空间中可见,基类正确声明了类型别名,派生类正确继承了基类,并且基类的类型别名定义正确。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++中派生类成员访问形式

C++中派生类成员访问形式主要有以下两种: 1、内部访问:由派生类中新增成员对继承来成员访问。 2、对象访问:在派生类外部,通过派生类对象对从继承来成员访问。...今天给大家介绍在3中继承方式下,派生类成员访问规则。...private成员在私有派生类中是不可直接访问,所以无论是派生类成员还是通过派生类对象,都无法直接访问从继承来private成员,但是可以通过提供public成员函数间接访问。...private成员在私有派生类中是不可直接访问,所以无论是派生类成员还是派生类对象,都无法直接访问从继承来private成员,但是可以通过提供public成员函数直接访问它们。...private成员在私有派生类中是不可直接访问,所以无论是派生类成员还是通过派生类对象,都无法直接访问private成员。

2.3K70

派生类中虚函数和非虚函数继承效果

base3 a1->leg(); //base1 a1->head(); //base2 Bird * a1 = new Bird(); return 0; } 为什么输出为...,那就是父普通函数 而虚函数作用,主要是为了让父指针可以调用子类函数,这种是在运行时才决定调用哪个函数 1、虚函数:   C++虚函数主要作用是“运行时多态”,父中提供虚函数实现,为子类提供默认函数实现...子类可以重写父虚函数实现子类特殊化。 2、纯虚函数:   C++中包含纯虚函数,被称为是“抽象”。抽象不能使用new出对象,只有实现了这个纯虚函数子类才能new出对象。   ...3、普通函数:   普通函数是静态编译,没有运行时多态,只会根据指针或引用“字面值”对象,调用自己普通函数。   普通函数是父为子类提供“强制实现”。   ...因此,在继承关系中,子类不应该重写父普通函数,因为函数调用至于对象字面值有关。 参考链接

6810

C++:43---派生类转换、静态动态变量

二、转换本质 派生类可以转换为本质是: ①为什么派生类可以转换为派生类而来,因此派生类中包含了方法和成员。...此时可以通过指针或引用指向派生类(相当于将派生类中继承那部分方法和成员绑定到上了,相当于派生类被截断了),然后就可以将派生类假装是一个对象来使用(调用其中成员/方法) ②为什么不能转换为派生类...如果将一个对象绑定到派生类指针/引用上,此时派生类通过指针/引用访问自己新定义成员/方法时,发现找不到(因此不能将转换为派生类) 例如:下面B继承于A,子类继承于父,同时为父成员开辟了空间...//假设B公有继承于A A *a; B b; a = &b; //将派生类转换为,正确 B *p = a; //将再转换为派生类,错误 五、静态类型/动态类型 在上面我们介绍过,指针或引用可以指向于对象也可以指向于派生类对象...,那么调用时候也取决于左边类型 转换之后,只能通过派生类访问属于自己(那一部分,而不能访问属于派生类数据成员(见下面演示案例③) 虚函数调用是个例外:虚函数调用是取决于指针或引用所指向类型

1.6K10

Python中协议 、鸭子类型 、 抽象 、混入

本篇文章探讨一下python中几个概念:协议 、鸭子类型 、 抽象 、混入。 一、协议 在python中,协议是一个或一组方法。...二、鸭子类型(duck typing) 多态一种形式,在这种形式中,对象类型无关紧要,只要实现了特定协议即可。...三、抽象 抽象就是定义各种方法而不做具体实现,任何继承自抽象必须实现这些方法,否则无法实例化。 那么抽象这样实现目的是什么呢? 假设我们在写一个关于动物代码。...print(issubclass(Cat, Animal)) 输出: True 这种通过注册和抽象关联起来叫做虚拟子类,虚拟子类不会继承注册抽象,而且任何时候都不会检查它是否符合抽象接口...从概念上讲,混入不定义新类型,只是打包方法,便于重用。混入应该提供某方面的特定行为,只实现少量关系非常紧密方法并且混入绝对不能实例化。

1.8K20

从零开始学C++之继承(二):继承与构造函数、派生类转换

一、不能自动继承成员函数 构造函数(包括拷贝构造函数) 析构函数 =运算符 二、继承与构造函数 构造函数不被继承,派生类中需要声明自己构造函数。...从输出可以看出: 派生类对象构造次序: 先调用对象成员构造函数,接着是构造函数,然后是派生类对象成员构造函数,最后是派生类自身构造函数。...四、派生类转换 当派生类以public方式继承时,编译器可自动执行转换(向上转型 upcasting 安全转换) 派生类对象指针自动转化为对象指针 派生类对象引用自动转化为对象引用...派生类对象自动转换为对象(特有的成员消失) 当派生类以private/protected方式继承派生类对象指针(引用)转化为对象指针(引用)需用强制类型转化。...; // 对象无法强制转化为派生类对象     return 0; } 五、派生类转换 对象指针(引用)可用强制类型转换为派生类对象指针(引用), 而对象无法执行这类转换.

1.5K00

JavaString为什么要设成immutable类型

答案一:         最流行Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,JavaString为什么要设成...immutable类型?...在Java中将String设计成不可变是综合考虑到各种因素结果,想要理解这个问题,需要综合内存,同步,数据结构以及安全等方面的考虑. 在下文中,将为各种原因做一个小结。 1....事实上,这也是Java面试中许多 "为什么" 答案。 答案三:String不可变性好处         String是所有语言中最常用一个。...这就是HashMap中键往往都使用字符串。         以上就是总结字符串不可变性好处。

32140

为什么使用不了了?

【分析】:这个错误比较明显,图中将“TestClass2”写在了 “TestClass1”中,在使用中是不允许出现嵌套,否则就是我们常说”,必须杜绝这样编程失误。...错误情况2 在同一项目中使用“TestClass2”这个时出现错误。 【分析】:“TestClass1”中只有一个方法,没有其他,所以不存在“情况。...仔细观察,发现Program 命名空间为 “thinger.com” ,而“TestClass1”命名空间为 “thinger.com.cn”,两者命名空间不一致。...解决方案 将名改为 “TestClass1”即可。 错误情况4 在调用库中“TestClass”这个时出现错误。 【分析】:无法调用库中时,可能是由于没有在项目中将库引用进来。...在解决方案下找到要添加引用库,点击确定,将库引用进来。  最后在代码中引用库,问题解决。

68430

总结继承和多态一些问题

切片: 我们都知道,多态条件是虚函数重写和必须通过指针或者引用调用虚函数。。那么为什么一定是需要指针或引用呢? 先来看看不用指针或引用,也就是使用对象来调用虚函数。...如果后面需要虚表的话就找不到了,这也就乱套了。...因此,事实上,对象对派生类对象切片时候,不会把派生类虚表也拷贝过去,切片后将派生类中属于一部分拷贝过去后,此时虚表还是原本虚表!...不能,因为静态成员函数没有this指针,使用类型::成员函数调用方式无法访问虚函数表,所以静态成员函数无法放进虚函数表。 7.析构函数可以虚函数吗? 析构函数最好是虚函数。...抽象作用是强制重写虚函数。另外抽象体现出了接口继承关系 大家如果还有什么问题需要补充的话可以评论告诉哦!

43620

【C++】继承

然后呢,还想定义一个学生,那此时还需要重新从0开始定义一个吗? 当然也是可以。但是像这种情况,使用继承就会非常香。 为什么这种情况可以使用继承呢?...我们说引用其实就是起别名嘛,那这里rp就可以认为是子类对象s中属于父Person那一部分别名。...可以赋值给派生类吗? 是不行对象不能赋值给派生类对象。...我们发现这里我们自己初始化继承下来_name成员但是报错了。 为什么不行呢?那这里要告诉大家是: 派生类构造函数必须调用构造函数初始化那一部分成员。...如果没有默认构造函数,则必须在派生类构造函数初始化列表阶段显示调用。 那其实这里感觉就有点像子类里面有一个父自定义类型成员一样。

10210

【C++】从零开始认识继承

3.2 派生类赋值转换 在之前学习中,我们知道相近类型类型可以相互转换: int i = 1 ; double d = i; string s = "111111"; const string...父 = 子类,会对子类进行切片,把父部分给进行赋值。 也可以使用引用和指针,同样也是通过切片来进行赋值。都可以对派生类进行修改。 引用 引用就是创建一个子类中部分别名。...寓意把派生类中父那部分切来赋值过去。 对象不能赋值给派生类对象。 指针或者引用可以通过强制类型转换赋值给派生类指针或者引用。但是必须是指针是指向派生类对象时才是安全。...构造函数 首先派生类成员可以分为以下几种:父成员 , 子类成员 , 内置类型,自定义类型。 对于子类成员,规则和普通一样(内置类型不做处理,自定义类型调用其构造函数)。...C++是先驱者(人直觉认为多继承很合理,感觉正常人都会想到多继承),并且c++中多继承处理起来十分复杂,访问变量过程就会很复杂!!!

5610

C++之面向对象语法笔记

这个已有的称为,新建称为派生类。 C++ 继承继承指就是派生类关系。...当使用不同类型继承时,遵循以下几个规则: 继承类型 说明 public 当一个派生自公有时,公有成员也是派生类公有成员,保护成员也是派生类保护成员,私有成员不能直接被派生类访问...protected 当一个派生自保护时,公有和保护成员将成为派生类保护成员。 private 当一个派生自私有时,公有和保护成员将成为派生类私有成员。...C++多态性用一句话概括就是:在函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象实际类型来调用相应函数。...如果对象类型派生类,就调用派生类函数;如果对象类型,就调用函数。

1.5K40

C++之多态一个例子

前面我们已经讲过,派生类对象可以替代对象为对象引用初始化或赋值(详情请查看:C++派生类转换)。...现在 Circle是Point公用派生类,因此,pRef不能认为是c别名,它得到了c起始地址, 它只是c中部分别名,与c中部分共享同一段存储单元。...请注意,这两个area函数不是重载函数,它们不仅函数名相同,而且函数类型和参数个数都相同,两个同名函数不在同 —个中,而是分别在派生类中,属于同名覆盖。...pRef是Point引用变量,用cy1对其初始化,但它不是cy1别名,只是cy1中Point部分别名,在输出pRef时是作为一个Point对象输出,也就是说,它是一个“点”。...同样,cRef是Circle引用变量,用cy1对其初始化,但它只是cy1中直接Circle部分别名, 在输出 cRef 时是作为Circle对象输出,它是一个"圆”,而不是一个“圆柱体”

86770

《逆袭进大厂》第三弹之C++提高篇79问79答

带有默认构造函数,如果一个没有任务构造函数派生类派生自一个带有默认构造函数,那么该派生类会合成一个构造函数调用上一层默认构造函数; 3) 带有一个虚函数 4) 带有一个虚...例如,绘画程序中,shape作为一个可以派生出圆形、矩形、正方形、梯形等, 如果要求面积总和的话,那么会可以使用一个 shape * 数组,只要依次调用派生类area()函数了。...1) 向上类型转换 将派生类指针或引用转换为指针或引用被称为向上类型转换,向上类型转换会自动进行,而且向上类型转换是安全。...2) 向下类型转换 将指针或引用转换为派生类指针或引用被称为向下类型转换,向下类型转换不会自动进行,因为一个对应几个派生类,所以向下类型转换时不知道对应哪个派生类,所以在向下类型转换时必须加动态类型识别技术...虚函数是为了实现动态编联产生,目的是通过类型指针指向不同对象时,自动调用相应、和类同名函数(使用同一种调用形式,既能调用派生类又能调用同名函数)。

2.2K30

《C++Primer》第十五章 面向对象程序设计

例如Quote类型变量 3.2 不存在从派生类隐式类型转换 之所以存在派生类类型转换是因为每个派生类对象都包含一个部分,而引用或者指针可以绑定到该部分上,反之不存在从派生类隐式类型转换...3.3 在对象之间不存在类型转换 派生类自动类型转换只对指针或者引用类型有效,在派生类类型类型之间不存在这样转换。...中查找不到isbn(),然后在Disc_quote中查找不到isbn(),最终会被解析成Quote中isbn()。...在p或者obj静态类型对应中查找mem,如果找不到则依次在直接中不断查找直至到达继承链顶端。...虚函数与作用域 从名字查找先于类型检查我们可以得知为什么派生类虚函数为什么必须有相同形参列表了。

1.2K20

C++函数隐藏、覆盖和重载

如果派生类函数与函数同名, 但是参数不同. 此时, 不论有无 virtual 关键字, 函数将被隐藏(注意别与重载混淆).  ...如果派生类函数与函数同名, 并且参数也相同, 但是函数没有 virtual 关键字. 此时, 函数被隐藏(注意别与覆盖混淆).       .... ----  如果派生类函数与函数同名, 但是参数不同. 此时, 不论有无 virtual 关键字, 函数将被隐藏(注意别与重载混淆).          ...关键字, 但是因为是分别存在与派生类不同函数, 所以在不存在覆盖关系(重载更不可能).     ...virtual 关键字, 好像就是在告诉你, 这个函数可以给派生类同名字同参数函数覆盖; 纯虚函数更是直接告诉派生类, 你一定要写一个同名字同参数函数覆盖,  哈哈!

1.1K10

C++面试知识总结

2.23 有一个char * 型指针刚好指向一些int 型变量, 想跳过它们。 为什么((int *)p)++; 不行? 类型转换实质“把这些二进制位看作另一种类型, 并作相应对待”。...函数覆盖是指派生类函数覆盖函数,函数名、参数类型、返回值类型一模一样。派生类对象会调用子类中覆盖版本,覆盖父函数版本。 隐藏”是指派生类函数屏蔽了与其同名函数。...覆盖和隐藏区别: 派生类函数与函数同名,但是参数不同。此时,不论有无virtual关键字,函数将被隐藏。 派生类函数与函数同名,参数也相同。...3.5 和子类构造、析构顺序 定义一个对象时先调用构造函数、然后调用派生类构造函数 先派生类析构后析构,也就是说在析构调用时候,派生类信息已经全部销毁了 3.6 深拷贝与浅拷贝区别...,派生类成员函数可以访问公有和受保护成员;公有继承时受保护成员,可以通过派生类对象访问但不能修改。

1.7K41

盘点Python中继承和多态

大家好,是Go进阶者。今天给大家分享Python基础之继承和多态。 一、继承介绍 继承是一种创建新方式,新创建叫子类,继承叫父、超。...1.继承语法 Class 派生类名(名):#名写在括号里。 在继承关系中,已有的,设计好称为父,新设计称为子类或派生类派生类可以继承父公有成员,但是不能继承其私有成员。...继承特点 在继承中构造函数(init()方法)不会被自动调用,它需要在其派生类构造中亲自专门调用。...如果需要在派生类中调用方法时,通过“名.方法名()”方法来实现,需要加上名前缀,且需要带上self参数变量。区别于在中调用普通函数时并不需要带上self 参数。...Python总是首先查找对应类型方法,如果它不能在派生类中找到对应方法,它才开始到中逐个查找(先在本类查找调用方法,找不到才去中找)。 3.

66520

盘点Python中继承和多态

大家好,是Go进阶者。今天给大家分享Python基础之继承和多态。 一、继承介绍 继承是一种创建新方式,新创建叫子类,继承叫父、超。...1.继承语法 Class 派生类名(名):#名写在括号里。 在继承关系中,已有的,设计好称为父,新设计称为子类或派生类派生类可以继承父公有成员,但是不能继承其私有成员。...继承特点 在继承中构造函数(init()方法)不会被自动调用,它需要在其派生类构造中亲自专门调用。...如果需要在派生类中调用方法时,通过“名.方法名()”方法来实现,需要加上名前缀,且需要带上self参数变量。区别于在中调用普通函数时并不需要带上self 参数。...Python总是首先查找对应类型方法,如果它不能在派生类中找到对应方法,它才开始到中逐个查找(先在本类查找调用方法,找不到才去中找)。 3.

85810
领券