厕所复制函数的一段代码编译不通过 求指点
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
using namespace std;
class A {
public:
// 构造函数为指针成员开辟空间并赋初值0
A() {
num_p = new int;
*num_p = 0;
}
// 自定义复制函数
A (const A & a) {
num_p = new int;
*num_p = a.getNum();
}
// 给指针所指对象赋值
void setNum(int num) {
*num_p = num;
}
// 获取指针所指对象
int getNum() {
int num = *num_p;
return num;
}
private:
int *num_p;
};
int main()
{
A a1;
// 设置a1指针成员所指对象的值
a1.setNum(1);
// 调用自定义的复制函数
A a2=a1;
// 观察得出a1,a2的指针成员所指对象均为整数1。
cout << "a1`s num: " << a1.getNum() << endl;
cout << "a2`s num: " << a2.getNum() << endl;
// 修改a1指针成员所指对象的值
a1.setNum(2);
// 观察得出不单a1的指针成员所指对象改了,a2的没变。
cout << "a1`s num: " << a1.getNum() << endl;
cout << "a2`s num: " << a2.getNum() << endl;
return 0;
}
编译报错:
将‘const A’作为‘int A::getNum()’的‘this’实参时丢弃了类型限定 [-fpermissive]
这是什么意思?球指点
[解决办法]
A a2=a1;这步中,a1以const引用传递进去,调用a.getNum()时发现a是const而getNum不是const函数因此报错
int getNum() {
改成
int getNum() const {
就好了
[解决办法]
这是由于 A (const A & a) 传递的是const参数,而int getNum() 不保证传递的实参不改变,所以
报错(STL机制问题). 应该把int getNum() 声明为const函数,以保证编译通过。
[解决办法]
//int getNum() {
int getNum() const {
int num = *num_p;
return num;
}