为什么方法getName()错误?
#include <iostream.h>
#include <string.h>
class People
{
public:
char* getName();
void setName(char* n);
private:
char* name;
};
void People::setName(char* n)
{
name = new char(strlen(n));
strcpy(name,n);
}
char* People::getName()
{
return name;
}
答案 0 :(得分:7)
因为Class
应为class
。
现在通过编辑,您不会在类定义中声明setName
。
编译器很挑剔(像我们一样)。为什么不向我们展示编译器告诉你的确切内容。
答案 1 :(得分:2)
因为您公开了对象中私有数据的基础结构。复制并返回。
答案 2 :(得分:2)
这里有几件事。首先,正如伊格纳西奥指出的那样(假设这是你的问题,它有点模糊),我们有私人成员,所以其他类不能随意搞砸他们。我们通过公共接口公开我们想要其他类的内容。
其次,鉴于这是C ++,我强烈建议您使用std::string
而不是char*
。这是你的班级:
#include <string>
class Person
{
private:
std::string m_Name;
public:
const std::string& getName() const {return(m_Name);};
}; // eo class Person
我们在这做了什么?
1)我们有一个C ++ std::string
,可以为我们处理字符串的所有业务。我们不必担心内存分配,缓冲区大小不足,等等。
2)它是私密的,没有人可以搞定它,所以外部的课程不能去:
Person p;
p.m_Name = "hahaha, I just messed with you";
3)为了让我们班级的用户可以访问该名称,我们返回const std::string&
。他们可以使用它,看到它,但不能修改它(当然,除非它们const_cast&lt;&gt;它离开了,但我们至少表明了我们的意图)。
4)将getter标记为const。这告诉编译器在调用期间我们不会改变类的任何成员。
我希望无论你的问题是什么,我都会回答。我现在不知道。
答案 3 :(得分:1)
这是完全合法的。你遇到什么错误?
PS 类必须与c
中的小写class
一样。
您的setName()
课程定义中未定义编辑 People
。
另外,
name = new char(strlen(n));
是错的。你应该这样声明:
name = new char[strlen(n)];
OR
name = new char[255]; //Constant value.
OR
name = malloc(sizeof(char)*strlen*(n));
答案 4 :(得分:1)
如果你修正了Class
拼写错误,你可以这样做:它应该是class
。
当您提出此类问题时,请提供编译错误日志,我们不能说任何有用的内容,但如果您不这样做,请猜测。
答案 5 :(得分:1)
使用
#include <iostream>
#include <string>
在包含字符串标题后,使用字符串而不是char。
using namespace std;
class People
{
public:
string getName();
private:
string name;
};
从getName返回一个句柄,char指针,私有数据,名称是bad idea
答案 6 :(得分:1)
分配的缓冲区比输入字符串n小一个字节。我想你忘了尾随'\ 0'的空间。