C++编译报错C2440:“=”:无法从“const char”转换为“char”.

#include"candybar.h"#include<iostream>#include<string>usingstd::cout;usingstd::cin;vo... #include "candybar.h"
#include <iostream>
#include <string>
using std::cout;
using std::cin;
void MyCandybar( CandyBar & candybarref, const char* mybrand = "Millennium Munch",const double myweight = 2.85,const int myenergy = 350 );
void structprint(const CandyBar & candybarref );
int main()
{
CandyBar lunch = {"B&R",99.8,300};
MyCandybar( lunch );
structprint( lunch );
cin.get();
return 0;
}
void MyCandybar( CandyBar & candybarref, const char* mybrand, const double myweight, const int myenergy)
{
candybarref.Energy = myenergy;
candybarref.pBrand = mybrand;
candybarref.Weight = myweight;
}
void structprint(const CandyBar & candybarref)
{
cout << "The brand is: " << candybarref.pBrand << "\n";
cout << "The weight is: " << candybarref.Weight << "\n";
cout << "The Energy is: " << candybarref.Energy << "\n";
}

源程序如上,另外头文件里定义了一个结构体:
#ifndef _CANDYBAR_H_
#define _CANDYBAR_H_
struct CandyBar
{
char *pBrand;
float Weight;
int Energy;
};

#endif

编译时报错C2440,将函数定义的第二个形参const去掉,变成下面这样,问题就解决了。
void MyCandybar( CandyBar & candybarref, char* mybrand = "Millennium Munch",const double myweight = 2.85,const int myenergy = 350 );

但是不明白形参中的const只是想确保实参不被修改,跟字符指针数组的赋值有什么关系,请指教!
展开
 我来答
空雪梦见
2014-09-03 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1200万
展开全部
因为CandyBar::pBrand不是const的
将一个const赋值给非const的时候(candybarref.pBrand = mybrand;)会报错
追问
也就是说变量的值不能等于一个常量?  说不通吧,能具体点么? const char*pointer和char *pointer为什么之间不能赋值?
追答
char* 可以赋值给 const char*,反过来不行。
前者允许你改变指向的内存的值,后者不允许你改变指向的内存的值。
比如你现在有一块内存,这块内存是可以改变值的,那么两种指针都能指向这里:后者虽然不允许你改变值,但是反正指针指过去你不改变值又不会有问题
但是现在你这块内存是不能改变值的,那么如果你把可以改变值的指针指过去,那就有问题了:如果执行了改变值的操作(就是赋值),那么这块“不允许改变值”(或者叫“只读”)的内存块就要出错了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式