首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

洗手间复制函数的一段代码编译不通过 求指点

2013-08-09 
厕所复制函数的一段代码编译不通过 求指点#include iostream#include cstdlib#include fstream#incl

厕所复制函数的一段代码编译不通过 求指点

#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;


}

热点排行