构造函数数组
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->grades
。它是一个数组,您需要分配给特定元素。为什么函数只取一个成绩作为参数,而不是数组?
看来您需要重新阅读教科书/教程中有关数组的部分。
离题:好像还没有人告诉过你Member Initializer List。非常方便的工具。我建议在链接中跳过大约 1/3 到解释部分并从那里开始阅读,然后返回到语法部分。
【参考方案1】:
很明显你在做什么。你必须定义像
这样的名字char name[20];
或者你应该在你的构造函数中为它分配内存,比如:
name = new char [20];
如果你动态分配内存,别忘了删除它
【讨论】:
【参考方案2】:将一个变量的值分配给另一个变量时,类型兼容很重要。错误消息告诉您您正在尝试进行不兼容的分配。要找出问题所在,请仔细查看变量的声明。类成员声明为
char name[] ;
但是构造函数的参数被声明为
char name
注意第一个是数组,第二个是单个字符。修复当前错误的一种方法是更改参数声明以匹配成员字段:
char name[]
但是,现在您将收到另一个错误,因为您无法将一个数组分配给另一个数组。相反,您必须一次复制每个字符。为了避免这种情况和其他并发症,我强烈建议您使用std::string
而不是char[]
。
【讨论】:
以上是关于构造函数数组的主要内容,如果未能解决你的问题,请参考以下文章