在学习类的模板时遇到了一个小问题
关键处代码
void printArray(const MyArray<int>& arr) {
arr.getSize();
}
int getSize() {
return this->m_size;
}
显示错误为C2662,经过查询发现是const修饰this指针出现了问题
大概就是无法将 const A转化为A&
调用类的成员函数时会隐式的传递this指针,而用const修饰引用对象时,将this指针变为了const this常值针。
类似的,当将函数在后面用const修饰时也会出现类似的问题。也会当作是修饰this指针。
当调用getSize()函数时,又会将这个被const修饰的this指针传回去,而getSize()函数没有被const修饰,所以会引起类型不匹配的问题。
对应知识点:
1.常成员函数可以访问常数据成员,也可访问普通数据成员。
2.常数据成员可以被常成员函数访问,也可被普通成员函数访问。
3.如果将一个对象说明为一个常对象,则通过该对象只能调用它的常成员函数,而不能调用普通的成员函数。
4.常成员函数不能更新对象的数据成员,也不能调用该类中的普通成员函数。
解决办法:
将getSize()函数声明为常函数
int getSize() const{
return this->m_size;
}
或者去掉形参里面的const修饰
void printArray( MyArray<int>& arr) {
arr.getSize();
}
解决!