invalid conversion from 'const char*' to 'char*'

Athos_K 2009-02-17 11:57:49
红色那行代码出现报错:invalid conversion from 'const char*' to 'char*'。 请问怎么改呀?为啥出错?
class Person
{
private:
char name[20];
int age;
char gender;
public:
Person(){}
void SetName(char *n){strcpy(name,n);}
void SetAge(int a){age=a;}
void SetGender(char g){gender=g;}
char *GetName()const(return name;}
int GetAge()const{return age;}
char GetGender()const{return gender;}
};
void PrintByGender(const vector<Person> &L,char sex)
{
vector<Person>::const_iterator iter=L.begin();
for(;iter!=L.end();iter++)
if((*iter).GetGender()==sex)
cout<<iter->GetName()<<" "<<iter->GetAge()<<endl;
}
...全文
10906 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mxy0226 2011-09-14
  • 打赏
  • 举报
回复
mark
qiongqiong421122 2011-08-02
  • 打赏
  • 举报
回复
http://gcc.gnu.org/gcc-4.4/porting_to.html这个网站有解答!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
porple_wang 2010-08-18
  • 打赏
  • 举报
回复
xuexi ....jiang you
Dinelgua 2009-02-17
  • 打赏
  • 举报
回复
由于函数GetName后面有const 所以不能函数不能做修改name的操作,为只读函数

char *GetName()const
{
return name;
}
waizqfor 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Athos_K 的回复:]
1楼的意思我没看懂
[/Quote]
你自己手误写错了啊
char *GetName()const(return name;}
====================>
char *GetName()const{return name;}
Athos_K 2009-02-17
  • 打赏
  • 举报
回复
1楼的意思我没看懂
waizqfor 2009-02-17
  • 打赏
  • 举报
回复

char *GetName()const{return name;} //不是(是{啊
dccrazyboy 2009-02-17
  • 打赏
  • 举报
回复
学习
叶落寒山 2009-02-17
  • 打赏
  • 举报
回复
关键你这里错在name的定义,你将那么定义成了数组的形式。这是一种const char*的形式。
如果你要是不想在GetName()函数钱加上const 。除非你修改name的定义,将其改成char*类型。

class Person
{
private:
char* name;
int age;
char gender;
public:
Person(){}
void SetName(char *n)
{
name = n;
}
void SetAge(int a)
{
age=a;
}
void SetGender(char g)
{
gender=g;
}
char* GetName()const
{
return name;
}
int GetAge()const
{
return age;
}
char GetGender()const
{
return gender;
}
};

void PrintByGender(const vector <Person> &L,char sex)
{
vector <Person>::const_iterator iter=L.begin();
for(;iter!=L.end();iter++)
if((*iter).GetGender()==sex)
cout <<iter->GetName() <<" " <<iter->GetAge() <<endl;
}

waizqfor 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Athos_K 的回复:]
回3楼:我把手误纠正了,问题依然存在。
回4、5楼:我没有在GetName()中修改name。

原因我找到了,跟大家共享下:改成如下格式就OK了:
const char *GetName()const{return name;}
由此我猜测invalid conversion from 'const char*' to 'char*' 中的
'const char*'指的是'const{return name;}'这部分,'char*'指的是
'char *GetName()'这部分

我觉得函数参数加上const非常容易出错,我这些天的错误都在const &…
[/Quote]
刚开始没看你的错误提示 就看代码了
你用const型的变量变量 先后的类型都要一直 要不肯定错的
C++就这样语法规定的
叶落寒山 2009-02-17
  • 打赏
  • 举报
回复


char *GetName()const
{
return name;
}
改为
const char* GetName()const
{
return name;
}

const 成员变量和const成员函数的用法

1.用const 修饰函数的返回值,即前面的const:
如果给以“指针传递”方式的函数返回值加const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。
例如函数
const char * GetString(void);
如下语句将出现编译错误:
char *str = GetString();
正确的用法是
const char *str = GetString();

如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。
例如不要把函数int GetInt(void) 写成const int GetInt(void)。
同理不要把函数A GetA(void) 写成const A GetA(void),其中A 为用户自定义的数据类型。
如果返回值不是内部数据类型,将函数A GetA(void) 改写为const A & GetA(void)的确能提高效率。但此时千万千万要小心,一定要搞清楚函数究竟是想返回一个对象的“拷贝”还是仅返回“别名”就可以了,否则程序会出错。
函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达。

2:const 成员函数,即最后面的const:
任何不会修改数据成员的函数都应该声明为const 类型。如果在编写const 成员函数时,不慎修改了数据成员,或者调用了其它非const 成员函数,编译器将指出错误,这无疑会提高程序的健壮性。以下程序中,类stack 的成员函数GetCount 仅用于计数,从逻辑上讲GetCount 应当为const 函数。编译器将指出GetCount 函数中的错误。
class Stack
{
public:
void Push(int elem);
int Pop(void);
int GetCount(void) const; // const 成员函数
private:
int m_num;
int m_data[100];
};
int Stack::GetCount(void) const
{
++ m_num; // 编译错误,企图修改数据成员m_num
Pop(); // 编译错误,企图调用非const 函数
return m_num;
}

Athos_K 2009-02-17
  • 打赏
  • 举报
回复
回3楼:我把手误纠正了,问题依然存在。
回4、5楼:我没有在GetName()中修改name。

原因我找到了,跟大家共享下:改成如下格式就OK了:
const char *GetName()const{return name;}
由此我猜测invalid conversion from 'const char*' to 'char*' 中的
'const char*'指的是'const{return name;}'这部分,'char*'指的是
'char *GetName()'这部分

我觉得函数参数加上const非常容易出错,我这些天的错误都在const & 这里,
不知道你们觉得如何?
glorywu 2009-02-17
  • 打赏
  • 举报
回复
把(改为{
fanr520 2009-02-17
  • 打赏
  • 举报
回复
在成员函数中如果在后面加上const 后函数中不能修改类成员,否则报错。

33,323

社区成员

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

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