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[]
,我们投了反对票。对于初学者来说,这是一种可怕的做法,不应该不被提及。