#include <iostream>using namespace std;//类的声明class Student {private: //私有的 char *m_name; int m_age; float m_score;public: //共有的 void setname(char *name); void setage(int age); void setscore(float score); void show();};//成员函数的定义void Student::setname(char *name) { m_name = name;}void Student::setage(int age) { m_age = age;}void Student::setscore(float score) { m_score = score;}void Student::show() { cout << m_name << "的年龄是" << m_age << ",成绩是" << m_score << endl;}int main() { //在栈上创建对象 Student stu; stu.setname("小明"); stu.setage(15); stu.setscore(92.5f); stu.show(); //在堆上创建对象 Student *pstu = new Student; pstu->setname("李华"); pstu->setage(16); pstu->setscore(96); pstu->show(); return 0;}就stu.setname("小明");和pstu->setname("李华");说“void Student::setname(char *)”: 无法将参数 1 从“const char [5]”转换为“char *” ,但是vc++6.0就没有
应该是VS的类型检测更加严格了, 按照你的思路, m_name是char*,一般来说是可以指向一块可写的缓冲区, 而“小明”这种string是保存在静态存储区,不可写。 你可以强制转换 m_name=(char*)name; 但是这样就不安全了,不如那一天你想给名字 strcpy(m_name,"xiaoming");这样一定会出错。因为m_name实际指向不可写内存区域。正确的设计应该是,先为m_name分配缓冲区,if(m_name==NULL){m_name=new...}else if(长度不够){销毁并重新分配足够的缓冲区}然后用strcpy_s之类的函数赋值。这样就可以随意改名字了。