Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++ 为什么分数是0? #包括 #包括 使用名称空间std; 班级学生{ 公众: const int code stud; int noGrades=0; int*grades=NULL; 学生(内部代码):代码螺柱(代码){ } 学生(整数代码,整数*成绩,整数分数):编码螺柱(代码){ 这->noGrades=noGrades; 此->等级=新整数[noGrades]; 对于(int i=0;i等级[i]=等级[i]; } 学生(const Student&existent):codeStud(existing.codeStud){ 此->noGrades=existence.noGrades; 此->等级=新整数[此->无等级]; 对于(inti=0;inoGrades;i++) 此->等级[i]=存在。等级[i]; } int getCode(){ 返回此->代码螺柱; } int getNoGrades(){ 返回此->noGrades; } 无效设置等级(int grades[],int noGrades){ 这->noGrades=noGrades; 此->等级=新整数[noGrades]; 对于(int i=0;i等级[i]=等级[i]; } }; void main(){ 学生s1(101); 我修改了你代码中的一些内容来编译它 #include<iostream> #include<string> using namespace std; class Student { public: const int codeStud; int noGrades = 0; int* grades = NULL; Student(int code) :codeStud(code) { } Student(int code, int* grades, int noGrades) :codeStud(code) { this->noGrades = noGrades; this->grades = new int[noGrades]; for (int i = 0; i < noGrades; i++) this->grades[i] = grades[i]; } Student(const Student&existent):codeStud(existent.codeStud) { this->noGrades = existent.noGrades; this->grades = new int[this->noGrades]; for (int i = 0; i < this->noGrades; i++) this->grades[i] = existent.grades[i]; } int getCode() { return this->codeStud; } int getNoGrades() { return this->noGrades; } void setGrades(int grades[],int noGrades) { this->noGrades = noGrades; this->grades = new int[noGrades]; for (int i = 0; i < noGrades; i++) this->grades[i] = grades[i]; } }; void main() { Student s1(101); cout<<s1.getNoGrades(); int grades[] = { 10,7,8,10,4 }; Student s2(104, grades, 5); cout << "\n" << s2.getNoGrades(); Student s3 = s2; cout << "\n" << s3.getCode(); int grades2[] = { 5,5,4,10 }; s1.setGrades(grades2,4); cout << "\n" << s1.getNoGrades(); // here is the problem }_C++_Visual Studio_Oop - Fatal编程技术网

C++ 为什么分数是0? #包括 #包括 使用名称空间std; 班级学生{ 公众: const int code stud; int noGrades=0; int*grades=NULL; 学生(内部代码):代码螺柱(代码){ } 学生(整数代码,整数*成绩,整数分数):编码螺柱(代码){ 这->noGrades=noGrades; 此->等级=新整数[noGrades]; 对于(int i=0;i等级[i]=等级[i]; } 学生(const Student&existent):codeStud(existing.codeStud){ 此->noGrades=existence.noGrades; 此->等级=新整数[此->无等级]; 对于(inti=0;inoGrades;i++) 此->等级[i]=存在。等级[i]; } int getCode(){ 返回此->代码螺柱; } int getNoGrades(){ 返回此->noGrades; } 无效设置等级(int grades[],int noGrades){ 这->noGrades=noGrades; 此->等级=新整数[noGrades]; 对于(int i=0;i等级[i]=等级[i]; } }; void main(){ 学生s1(101); 我修改了你代码中的一些内容来编译它 #include<iostream> #include<string> using namespace std; class Student { public: const int codeStud; int noGrades = 0; int* grades = NULL; Student(int code) :codeStud(code) { } Student(int code, int* grades, int noGrades) :codeStud(code) { this->noGrades = noGrades; this->grades = new int[noGrades]; for (int i = 0; i < noGrades; i++) this->grades[i] = grades[i]; } Student(const Student&existent):codeStud(existent.codeStud) { this->noGrades = existent.noGrades; this->grades = new int[this->noGrades]; for (int i = 0; i < this->noGrades; i++) this->grades[i] = existent.grades[i]; } int getCode() { return this->codeStud; } int getNoGrades() { return this->noGrades; } void setGrades(int grades[],int noGrades) { this->noGrades = noGrades; this->grades = new int[noGrades]; for (int i = 0; i < noGrades; i++) this->grades[i] = grades[i]; } }; void main() { Student s1(101); cout<<s1.getNoGrades(); int grades[] = { 10,7,8,10,4 }; Student s2(104, grades, 5); cout << "\n" << s2.getNoGrades(); Student s3 = s2; cout << "\n" << s3.getCode(); int grades2[] = { 5,5,4,10 }; s1.setGrades(grades2,4); cout << "\n" << s1.getNoGrades(); // here is the problem }

C++ 为什么分数是0? #包括 #包括 使用名称空间std; 班级学生{ 公众: const int code stud; int noGrades=0; int*grades=NULL; 学生(内部代码):代码螺柱(代码){ } 学生(整数代码,整数*成绩,整数分数):编码螺柱(代码){ 这->noGrades=noGrades; 此->等级=新整数[noGrades]; 对于(int i=0;i等级[i]=等级[i]; } 学生(const Student&existent):codeStud(existing.codeStud){ 此->noGrades=existence.noGrades; 此->等级=新整数[此->无等级]; 对于(inti=0;inoGrades;i++) 此->等级[i]=存在。等级[i]; } int getCode(){ 返回此->代码螺柱; } int getNoGrades(){ 返回此->noGrades; } 无效设置等级(int grades[],int noGrades){ 这->noGrades=noGrades; 此->等级=新整数[noGrades]; 对于(int i=0;i等级[i]=等级[i]; } }; void main(){ 学生s1(101); 我修改了你代码中的一些内容来编译它 #include<iostream> #include<string> using namespace std; class Student { public: const int codeStud; int noGrades = 0; int* grades = NULL; Student(int code) :codeStud(code) { } Student(int code, int* grades, int noGrades) :codeStud(code) { this->noGrades = noGrades; this->grades = new int[noGrades]; for (int i = 0; i < noGrades; i++) this->grades[i] = grades[i]; } Student(const Student&existent):codeStud(existent.codeStud) { this->noGrades = existent.noGrades; this->grades = new int[this->noGrades]; for (int i = 0; i < this->noGrades; i++) this->grades[i] = existent.grades[i]; } int getCode() { return this->codeStud; } int getNoGrades() { return this->noGrades; } void setGrades(int grades[],int noGrades) { this->noGrades = noGrades; this->grades = new int[noGrades]; for (int i = 0; i < noGrades; i++) this->grades[i] = grades[i]; } }; void main() { Student s1(101); cout<<s1.getNoGrades(); int grades[] = { 10,7,8,10,4 }; Student s2(104, grades, 5); cout << "\n" << s2.getNoGrades(); Student s3 = s2; cout << "\n" << s3.getCode(); int grades2[] = { 5,5,4,10 }; s1.setGrades(grades2,4); cout << "\n" << s1.getNoGrades(); // here is the problem },c++,visual-studio,oop,C++,Visual Studio,Oop,什么是正确的,因为在第一次打印之前,您没有在代码的任何地方指定s1的等级数 此外,还应寻找: https://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c 为什么void main()不正确在我更正了输入错误(codeStud-->codeStud)之后,您的代码为我生成了正确的结果。在此之前,我甚至无法编译它,所以我猜您的IDE只运行了最新的工作版本,可以成功编译(在某处查找错误消息)。这就是您得到错

什么是正确的,因为在第一次打印之前,您没有在代码的任何地方指定s1的等级数

此外,还应寻找:
https://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c

为什么void main()不正确

在我更正了输入错误(
codeStud
-->
codeStud
)之后,您的代码为我生成了正确的结果。在此之前,我甚至无法编译它,所以我猜您的IDE只运行了最新的工作版本,可以成功编译(在某处查找错误消息)。这就是您得到错误结果的原因,因为您的更改甚至不在该版本中

关于代码的几个注意事项:

  • setGrades
    函数中,检查
    grades
    是否没有指向某个对象。例如,如果我调用
    Student(int-code,int*grades,int-noGrades)
    并且在调用
    setGrades
    之后,代码会泄漏内存,因为它丢失了
    Student(int-code,int*grades,int-noGrades)的数组
    之前已分配

  • 您应该使用而不是C样式的数组。它将使您的代码更干净,更不容易出错(参见我的示例)

  • 您可以将getter函数设置为const(如我的示例中所示),这样就可以保证这些函数不会更改类中任何成员的值(如果更改了,则会出现编译错误)。除此之外,您还可以将成员变量设置为private

使用
vector
s实现:

#包括//cout
#包含//向量
使用名称空间std;
班级学生
{
公众:
学生(const int代码)
:m_代码{code}
{
}
学生(常量整数代码、常量标准::向量和分数)
:m_code{code},
m_等级{等级}
{
}
//默认复制构造函数已足够,因为可以复制该类
//成员方面。
int getCode()常量{
返回m_码;
}
int getNoGrades()常量{
返回m_grades.size();
}
无效设置坡度(常量标准::矢量和坡度){
m_等级=等级;
}
私人:
const int m_码;
标准:向量m_等级;
};
int main()
{
学生s1(101);

奇怪。在我看来很好。在我的手机上实际运行它是如此困难。你是否正确读取了输出?除了一个小的打字错误(你有
const int codeStud;
,但应该是
const int codeStud;
-如其他地方所述),代码按预期运行。可能由于上面列出的打字错误,您没有运行当前代码。我用英语翻译了变量名称,我的代码没有这种类型的错误。它一直显示0而不是4:\。此外,我重新启动了电脑。很抱歉,我没有提到,但我不允许更改Studen对象的类型是的,我很抱歉给你添了麻烦。

#include<iostream>
#include<string>
using namespace std;

class Student {
public:
    int codeStud;
    int noGrades = 0;
    int* grades = NULL;

    Student(int code) {
        codeStud = code;
    }

    Student(int code, int* grades, int noGrades) {
        this->noGrades = noGrades;
        this->grades = new int[noGrades];
        for (int i = 0; i < noGrades; i++)
            this->grades[i] = grades[i];

    }

    Student(const Student&existent){
        this->noGrades = existent.noGrades;
        this->grades = new int[this->noGrades];
        for (int i = 0; i < this->noGrades; i++)
            this->grades[i] = existent.grades[i];
    }

    int getCode() {
        return this->codeStud;
    }

    int getNoGrades() {
        return this->noGrades;
    }

    void setGrades(int grades[],int noGrades) {
        this->noGrades = noGrades;
        this->grades = new int[noGrades];
        for (int i = 0; i < noGrades; i++)
            this->grades[i] = grades[i];
    }
};

int main() {

    Student s1(101);
    cout<<s1.getNoGrades();
    int grades[] = { 10,7,8,10,4 };
    Student s2(104, grades, 5);
    cout << "\n" << s2.getNoGrades();

    Student s3 = s2;

    int grades2[] = { 5,5,4,10 };
    s1.setGrades(grades2,4);
    cout << "\n" << s1.getNoGrades(); // here is the problem
}
0
5
4