关于error: assignment of data-member ‘A::pCost’ in read-only structure的问题

blackpool 2010-11-03 03:10:36
关于error: assignment of data-member ‘A::pCost’ in read-only structure的问题

Class A : public B
{
public:

void Initialise(void);
void GetCost( const CostType & cost ) const;

protected:

double* pCost;
};

void A::Initialise(void)
{

double iniCost[12] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 };
pCost = iniCost;
}

void GetCost( const CostType & cost ) const
{

double updatedCost[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
updatedCost = cost;

pCost = updatedCost; // 此行报错:error: assignment of data-member ‘A::pCost’
}

请教问题出在哪里?

需求是在A::Initialise初始化pCost指针,使其指向一个初始数组,然后在GetCost函数中更新pCost指向的数组。
函数GetCost( const CostType & cost ) const中的const无法去掉(可以去掉吗?),A继承自B得来。

谢谢!
...全文
1025 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengqibin 2010-11-03
  • 打赏
  • 举报
回复
void GetCost( const CostType & cost ) const;
xiaohuh421 2010-11-03
  • 打赏
  • 举报
回复
如果没有理解const的话,最好是不要乱用...会带来很多不必要的麻烦
acrifyh 2010-11-03
  • 打赏
  • 举报
回复
updatedCost = cost;
blackpool 2010-11-03
  • 打赏
  • 举报
回复
谢谢几位回答!

现在有几个问题:

1. A类由B类继承,在B类中,void GetCost( const CostType & cost ) const; 是virtual虚函数。如果在A类中需要覆盖,可以去掉const吗?

2. 如果在A类中,void GetCost( const CostType & cost ) const必须为const函数,其无法修改成员变量pCost,但是我记得好像是可以通过指针进行修改,请问具体怎么做?

3. 如youkuxiaobin提出的两个问题,updatedCost是一个固定地址不能做左值pCost变成野指针。现在我的需求是调用Initialise初始化pCost指针,然后每次调用GetCost修改pCost指向的数组,请问代码该怎么改?
youkuxiaobin 2010-11-03
  • 打赏
  • 举报
回复
updatedCost = cost;
这句话也有毛病
updatedCost是一个固定地址不能做左值
而且updatedCost这是一个局部变量,函数调用完,这样使pCost变成野指针
毛病太多。。。。。
youkuxiaobin 2010-11-03
  • 打赏
  • 举报
回复
函数是const不能改变成员变量

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧