C++ 问题:在类中创建动态数组
我现在正在写一个学生管理项目。我想在没有字符串和库的情况下学习如何使用指针。每个学生都有一个名字,一个号码和几门课程。我在一个班级里管理这个学生的数据。名称和课程只应占据绝对必要的空间。但是,我不知道如何正确地初始化它们并创建构造函数、setter或getter。稍后,我想在一个包含学生数组的类中管理学生类 我已经尝试在另一个数组中管理课程的char数组。我没有成功。这就是我现在创建二维数组的原因。我还提出了为课程和课程阵列创建额外课程的想法。但这不是我学习如何处理指针的方式 学生h:C++ 问题:在类中创建动态数组,c++,arrays,object,C++,Arrays,Object,我现在正在写一个学生管理项目。我想在没有字符串和库的情况下学习如何使用指针。每个学生都有一个名字,一个号码和几门课程。我在一个班级里管理这个学生的数据。名称和课程只应占据绝对必要的空间。但是,我不知道如何正确地初始化它们并创建构造函数、setter或getter。稍后,我想在一个包含学生数组的类中管理学生类 我已经尝试在另一个数组中管理课程的char数组。我没有成功。这就是我现在创建二维数组的原因。我还提出了为课程和课程阵列创建额外课程的想法。但这不是我学习如何处理指针的方式 学生h: #ifn
#ifndef STUDENT_H
#define STUDENT_H
#include <iostream>
class Student{
private:
int myLength_name;
char *myName; //=new char[myLength_name];
int myMatrikel;
int myLength_lv;
char *myLv; //=new char[myLength_lv];
//char **myLvs[30];
int myAnzLv;
public:
Student();
Student(char *name_chars, int length_name, int matrikel, int length_lv, char **lv_chars[][30]);
char &name_chars() const { return *myName; }
int matrikel() const { return myMatrikel; }
int length_name() const { return myLength_name; }
int length_lv() const { return myLength_lv; }
char &lv_chars() const { return *myLv; }
};
#endif // STUDENT_H
有人能帮我创建一个没有学生错误的班级吗?我真的不太擅长指针,到目前为止还没有找到有用的手册。
提前谢谢。
Eric当创建一个具有用作动态字符数组的字符指针的类时,我不相信您将能够使用构造函数的初始化列表功能。您应该首先通过以下方式验证它是否有效
myName = new char[strlen(name_chars)+1];
strcpy(myName, name_chars);
这是最基本的方法。但是,如果由于某种原因,数据输入不正确,在name\u chars中没有\0字符,则这并不特别安全。但这只是一个开始
我也会调查strncpy
要生成动态字符数组的数组。。。
比如[数学、语言、写作、历史]
您需要一个动态字符数组数组
char * course = new char[100]; // this is one char array of length 100.
char * * courses = new char*[10]; // this is 10 char pointers
courses[0] = new char[100]; // now, the first char pointer in courses
// is a dynamic array of length 100.
...
courses[9] = new char[100];
courses[10] = new char[100]; //!!!! THIS IS WRONG. Courses doesn't have 11 items in it.
// you can only use indexes 0-9 (10 char pointers)
@MPops
非常感谢你的帮助。我希望我正确地实现了您的代码。这两个文件现在看起来像这样,并且不会产生错误:
学生h:
class Student{
private:
char *myName;
int myMatrikel;
char *myLv; //=new char[myLength_lv];
char * * myLvs = new char*[30];
int myAnzLv;
public:
Student();
Student(char *name_chars, int matrikel, char *lv_chars);
char name_chars() const { return *myName; }
int matrikel() const { return myMatrikel; }
char lv_chars() const { return *myLv; }
};
student.cpp:
Student::Student() :
myLength_name(0),
myName(nullptr),
myMatrikel(0),
myLength_lv(0),
myLv(nullptr),
myAnzLv(0)
{}
Student::Student(char *name_chars, int length_name, int matrikel, int length_lv, char *lv_chars[][30]):
myLength_name(length_name),
myName(name_chars=new char[myLength_name]),
myMatrikel(matrikel),
myLength_lv(length_lv),
myLv(lv_chars=new char[myLength_lv][30]),
{}
Student::Student() :
myName(nullptr),
myMatrikel(0),
myLv(nullptr),
myLvs(nullptr),
myAnzLv(0)
{}
Student::Student(char *name_chars, int matrikel, char *lv_chars):
myMatrikel(matrikel)
{
myName = new char[strlen(name_chars)+1];
strcpy(myName, name_chars);
myLv = new char[strlen(lv_chars)+1];
strcpy(myLv, lv_chars);
}
````
一个也没有?在你的帖子里的角色。你到底需要什么帮助?@MPops哦,对不起。我完全忘记了真正的问题。我想摆脱代码的错误,我不知道如何。这就是我在这里寻求帮助的原因。您也需要发布这些错误。我们不确定这意味着什么。我真的认为这是关于使用惯用的C++编程的坏建议。@πῥεῖ 我同意,但我相信这个任务迫使他们自己做内存管理。此外,对直接回答问题的答案投否决票也不好,即使与生产级代码无关。您不理解指向字符的指针是什么。您是否有任何资源或导师可以帮助您澄清这些问题?阅读本网站:@MPops不幸的是,我们的讲师只向我们介绍这个主题,并希望我们在家自学。我再次告知了char指针的主题,并在代码中做了一些小改动。现在它向我显示了警告:非静态数据成员的类内初始化是一个C++11扩展[WC++11扩展]字符**myLvs=new char*[30];在…上你能帮我纠正错误吗?错误是怎么说的?非静态数据成员的类内初始化。。。。您是否试图在类的定义内初始化此myLvs数组?您不能,因为它不是静态的。您需要在构造函数中执行此操作。