构造函数数组

Posted

技术标签:

【中文标题】构造函数数组【英文标题】:Constructor Array 【发布时间】:2017-03-16 16:52:04 【问题描述】:

我的构造函数有关于数组的问题!

在我的头文件中我得到了这个(简化):

    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]' 时类型不兼容

P.S:我已经在这个网站上搜索过答案,但我是 C++ 新手,无法弄清楚。

【问题讨论】:

如果你正在使用字符串,你真的应该使用std::string 数组成员需要声明一个大小。 char name[] 缺少大小。你不能分配给一个数组,你需要使用像strcpy()这样的函数来复制一个C风格的字符串。但正如@NathanOliver 所说,您应该改用std::string 您也不能分配给this-&gt;grades。它是一个数组,您需要分配给特定元素。为什么函数只取一个成绩作为参数,而不是数组? 看来您需要重新阅读教科书/教程中有关数组的部分。 离题:好像还没有人告诉过你Member Initializer List。非常方便的工具。我建议在链接中跳过大约 1/3 到解释部分并从那里开始阅读,然后返回到语法部分。 【参考方案1】:

很明显你在做什么。你必须定义像

这样的名字
char name[20];

或者你应该在你的构造函数中为它分配内存,比如:

name = new char [20];

如果你动态分配内存,别忘了删除它

【讨论】:

【参考方案2】:

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

char name[] ;

但是构造函数的参数被声明为

char name

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

char name[]

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

【讨论】:

以上是关于构造函数数组的主要内容,如果未能解决你的问题,请参考以下文章

数组实例化调用构造函数? [复制]

堆数组中对象的构造函数[重复]

在 C# String 构造函数 String(Char*) 中,为啥构造函数不期望指向字符数组的指针?

子类构造函数

函数调用或构造函数调用中的 C++ 数组初始化

构造函数数组