C++ 构造函数不';不接受字符*
没有参数的构造函数可以工作,但另一个不能。 我很绝望,我什么都试过了 //标题C++ 构造函数不';不接受字符*,c++,arrays,constructor,char,initialization,C++,Arrays,Constructor,Char,Initialization,没有参数的构造函数可以工作,但另一个不能。 我很绝望,我什么都试过了 //标题 class Etudiant { private: char * name; unsigned int age; Date *datenaissance; public: Etudiant(); Etudiant(char * c,unsigned
class Etudiant
{
private:
char * name;
unsigned int age;
Date *datenaissance;
public:
Etudiant();
Etudiant(char * c,unsigned int,Date&);
~Etudiant();
};
这是我的.cpp
Etudiant::Etudiant()
{
this->name = new char();
strcpy(name, "kabil");
this->age = 18;
this->datenaissance = new Date();
}
Etudiant::Etudiant(char * c, unsigned int a, Date &d)
{
this->name = new char();
strcpy(this->name,c);
this->age = a;
this->datenaissance = new Date(d);
}
Etudiant::~Etudiant()
{
delete[]name;
name = 0;
}
这是我的主要任务
int main()
{
Date d();
Etudiant E(),E1("student",15,d);
system("pause");
}
我应该更改什么?要将文本字符串传递给函数,它必须具有
char const*
类型的参数,而不是char*
。因此,您的构造函数应该具有以下原型:
Etudiant(char const * c, unsigned int, Date &);
如上所述,您也没有分配足够的内存来复制构造函数中的字符串。这一行:
this->name = new char();
可能是:
this->name = new char[strlen(c) + 1];
因此,您有足够的内存执行此复制操作:
strcpy(this->name, c);
使用
std::string
。并替换dated()代码>日期d代码>否则您将声明一个函数。@solomok--不要只是“添加它”。删除所有char*
内容,并将其替换为std::string
this->name=new char()代码>在这里分配一个字符。datenaissance
为什么是指针name=0
应该是name=nullptr
,尽管它是无用的(法国的C++类通常是坏的:()“Yksisarvinen -我没有声明它不是C++的一部分。问题是何时何地使用动态内存管理。OP的代码不需要任何调用到<代码>新< /C>。第二,对这样的学生赋值是C++为什么会掉的一个主要原因,而那些同样的学生倾向于java或类似语言。让最简单的程序无法正常运行是令人沮丧的,而这完全没有必要。此外,请不要鼓励人们使用新的
(尤其是在没有提及删除
)的情况下)手动。@ SeloMon你不应该使用那个代码。使用<代码> STD::String
。不幸的是,这似乎是一个任务。我在法国目睹过太多的糟糕的C++教学,而不是对“SeloMon”感到同情。@ MatthuuRuuku:是的:我正在做我的老师正在做的事情,你能告诉我应该遵循什么样的文档来教C++吗?从专业角度来看,对于没有明确禁止使用C风格字符串和运算符new[]
,我们投了反对票。对于初学者来说,这是一种可怕的做法,不应该不被提及。