C++ windows环境(VS2017)编程报错总结

1.子类继承父类后无法访问父类中的protected public成员,访问时显示未定义

分析:子类继承父类,访问权限如下表

				                            	父类     
继承关系publicprotectedprivate
publicpublicprotectedprivate
protectedprotectedprotectedprivate
privateprivateprivateprivate

从访问权限是不应该的,经一步步调试发现是因为添加了模板编程带来的问题。
C++模板二段名字查找方法

根据 C++ 标准,对模板代码中的名字的查找,分为两个阶段进行:
模板定义阶段:刚被定义时,只有模板中独立的名字(可以理解为和模板参数无关的名字)参加查找
模板实例化阶段:实例化模板代码时,非独立的名字才参加查找。
如果没有用模板,事情会简单很多。然而这里的 B 本身是模板,需要进行二段式名字查找。
首先进入 B 的模板定义阶段,此时 B 的基类 A 依赖于模板参数 T,所以是一个「非独立」的名字。所以在这个阶段,对于 B 来说 A 这个名字是不存在的,于是 A::f() 也不存在。但此时这段代码仍旧是合法的,因为此时编译器可以认为 f 是一个非成员函数。

c++模板类在继承中子类无法访问父类的成员

1.对于两个非模板继承是可直接继承.
2.对于模板类继承非模板类时,在模板声明进行解析的时候就会进行查找
3.对于继承父类是模板类的会进行名称二次查找

解决方案:添加this指针指向所需要的父类访问成员

一个模板子类其实是不能在实例化之前就知道他的模板父类到底是谁,所以只能this->了

2. C2440 “return”: 无法从“list::iterator”转换为“list::iterator”(:由于复制构造函数不明确或者没有可用的复制构造函数,因此无法复制构造)

在这里插入图片描述
实际问题经编译器报错得知:是由于复制构造函数不明确或者没有可用的复制构造函数,因此无法复制构造
程序情况说明:编写list的迭代器,普通迭代器iterator和const_iterator,iterator继承const_iterator
解决:在拷贝构造函数加一个const

		const_iterator(const const_iterator &_X) :_Ptr(_X._Ptr) 
		{}
3. out_of_range找不到标识符

在编写_Xran的函数时,out_of_range隶属于std库中,因此需要添加 std:: 作用域

void _Xran() const
{
	_THROW(std::out_of_range, "invalid vector<bool> subscript");
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值