C++ 构造函数数组

C++ 构造函数数组,c++,arrays,constructor,C++,Arrays,Constructor,我的构造函数在数组方面有问题 在我的头文件中,我得到了以下简化: class Student { private: int am; char name[] ; int grades[8]; } 在我的cpp文件中: #include<iostream> #include<cstdlib> #include "Student.h" usi

我的构造函数在数组方面有问题

在我的头文件中,我得到了以下简化:

    class Student
  {  
        private:
                int am;
                char name[] ;
                int grades[8];
  }
在我的cpp文件中:

#include<iostream> 
#include<cstdlib> 
#include "Student.h"
using namespace std;

Student::Student()
{
}

Student::Student(int am , char name,int grades)
{
    this->am=am;
    this->name=name;
    this->grades=grades;
}
我得到了这个错误

[错误]将“char*”赋值给“char[0]”时存在不兼容的类型


S:我已经在这个站点中找到了答案,但是我是C++的新手,无法找到答案。

< P>当把一个变量的值分配给另一个时,重要的是类型是兼容的。错误消息告诉您正在尝试进行不兼容的分配。要找出问题所在,请仔细查看变量的声明。类成员声明为

char name[] ;
char name
但是构造函数的参数声明为

char name[] ;
char name
请注意,第一个是数组,但第二个是单个字符。修复当前错误的一种方法是更改参数声明以匹配成员字段:

char name[]

但是,现在您将得到另一个错误,因为您无法将一个数组分配给另一个数组。相反,您必须一次复制一个字符。为了避免这种情况和其他复杂情况,我强烈建议您使用std::string而不是char[]。你必须像这样定义名字

char name[20];
或者您应该在构造函数中为其分配内存,如:

name = new char [20];

如果动态分配内存,请不要忘记删除它

如果使用字符串,您确实应该使用std::string。数组成员需要声明大小。字符名[]缺少大小。您不能分配给数组,需要使用strcpy之类的函数来复制C样式的字符串。但正如@NathanOliver所说,您应该使用std::string。您也不能分配给这个->等级。这是一个数组,需要分配给特定的元素。为什么函数只取一个分数作为参数,而不是数组?似乎你需要重新阅读教科书/教程中有关数组的部分。离题:似乎还没有人告诉你这个问题。非常方便的工具。我建议在链接中跳过大约1/3的解释部分,从那里开始阅读,然后回到语法部分。