Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 问题:在类中创建动态数组_C++_Arrays_Object - Fatal编程技术网

C++ 问题:在类中创建动态数组

C++ 问题:在类中创建动态数组,c++,arrays,object,C++,Arrays,Object,我现在正在写一个学生管理项目。我想在没有字符串和库的情况下学习如何使用指针。每个学生都有一个名字,一个号码和几门课程。我在一个班级里管理这个学生的数据。名称和课程只应占据绝对必要的空间。但是,我不知道如何正确地初始化它们并创建构造函数、setter或getter。稍后,我想在一个包含学生数组的类中管理学生类 我已经尝试在另一个数组中管理课程的char数组。我没有成功。这就是我现在创建二维数组的原因。我还提出了为课程和课程阵列创建额外课程的想法。但这不是我学习如何处理指针的方式 学生h: #ifn

我现在正在写一个学生管理项目。我想在没有字符串和库的情况下学习如何使用指针。每个学生都有一个名字,一个号码和几门课程。我在一个班级里管理这个学生的数据。名称和课程只应占据绝对必要的空间。但是,我不知道如何正确地初始化它们并创建构造函数、setter或getter。稍后,我想在一个包含学生数组的类中管理学生类

我已经尝试在另一个数组中管理课程的char数组。我没有成功。这就是我现在创建二维数组的原因。我还提出了为课程和课程阵列创建额外课程的想法。但这不是我学习如何处理指针的方式

学生h:

#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数组?您不能,因为它不是静态的。您需要在构造函数中执行此操作。