C++ 在visual studio 2017中运行而不是在代码块中运行时,代码中出现错误 #包括 #包括 结构学生{ std::字符串名; 智力年龄; 浮标; }; student initiateStudent(标准::字符串名称、整数年龄、浮点数) { 学生证; s、 年龄=年龄; s、 分数=分数; s、 名称=名称; 返回s; } 学生*最高分(学生**总分) { 浮子温度=(*螺柱)->标记; 学生**柜台=新(学生*); *计数器=*螺柱; 对于(int i=0;i标记; } (*螺柱)+; } *螺柱=*计数器; 删除计数器; 返回*螺柱; } int main() { 学生总数=1; std::字符串名; 智力年龄; 浮标; 学生总数; 学生*stud=新学生[totalStudents]; 对于(int i=0;iname; std::cout>年龄; 标准::cout>标记; stud[i]=初始学生(姓名、年龄、分数); //STD::CUT HealthSeqs>代码>在主< 中修改 Studio,使其不再指向分配给新< /代码>的块,而是在该块的中间某处。然后 Dele[]Studid 呈现未定义的行为。

C++ 在visual studio 2017中运行而不是在代码块中运行时,代码中出现错误 #包括 #包括 结构学生{ std::字符串名; 智力年龄; 浮标; }; student initiateStudent(标准::字符串名称、整数年龄、浮点数) { 学生证; s、 年龄=年龄; s、 分数=分数; s、 名称=名称; 返回s; } 学生*最高分(学生**总分) { 浮子温度=(*螺柱)->标记; 学生**柜台=新(学生*); *计数器=*螺柱; 对于(int i=0;i标记; } (*螺柱)+; } *螺柱=*计数器; 删除计数器; 返回*螺柱; } int main() { 学生总数=1; std::字符串名; 智力年龄; 浮标; 学生总数; 学生*stud=新学生[totalStudents]; 对于(int i=0;iname; std::cout>年龄; 标准::cout>标记; stud[i]=初始学生(姓名、年龄、分数); //STD::CUT HealthSeqs>代码>在主< 中修改 Studio,使其不再指向分配给新< /代码>的块,而是在该块的中间某处。然后 Dele[]Studid 呈现未定义的行为。,c++,c++11,pointers,C++,C++11,Pointers,拥有highestScore以student*为准,并移除内部所有额外的间接层次。更好的是,在整个过程中使用std::vector,并避免手动内存管理。将错误消息(以及示例输入/输出)作为块格式文本(如代码)发布,而不仅仅是图像。除此之外,让我特别困惑的是,为什么你认为你需要动态分配一个指针,而它可能只是在堆栈上……为什么,如果它存在是为了找到得分最高的学生,它被称为计数器。还有一些问题:为什么不直接使用std::矢量而不是另一个新的?和std::max_元素()?和迭代器而不是原始指针?将其标

拥有
highestScore
student*
为准,并移除内部所有额外的间接层次。更好的是,在整个过程中使用
std::vector
,并避免手动内存管理。

将错误消息(以及示例输入/输出)作为块格式文本(如代码)发布,而不仅仅是图像。除此之外,让我特别困惑的是,为什么你认为你需要动态分配一个指针,而它可能只是在堆栈上……为什么,如果它存在是为了找到得分最高的学生,它被称为
计数器
。还有一些问题:为什么不直接使用
std::矢量
而不是另一个
新的
?和
std::max_元素()
?和迭代器而不是原始指针?将其标记为
c++11
,但却很少努力使用该版本中包含的强大标准库功能,而是以更危险的方式重新创建它们。创建指针数组有什么原因吗?
struct
对象不需要是指针@cybermonkey显示的程序实际上并不创建指针数组。在
newstudent[totalStudents]
中创建的唯一数组是
student
结构数组。
#include<iostream>
#include<string>

struct student {
    std::string name;

    int age;

   float marks;

};

student initiateStudent(std::string name, int age, float marks)
{
    student s;
    s.age = age;
    s.marks = marks;
    s.name = name;
    return s;

}
student* highestScore(student** stud, int total)
{
    float temp = (*stud)->marks;
    student **counter= new (student*);

    *counter = *stud;
    for (int i = 0; i < total; i++)
    {
       // std::cout<<(*stud)->marks;
        if (temp < (*stud)->marks)
        {
            *counter = *stud;
            temp = (*stud)->marks;
        }
        (*stud)++;
    }
    *stud = *counter;
    delete counter;
    return *stud;
}
int main()
{
        int totalStudents = 1;

        std::string name;

        int age;

        float marks;

        std::cin >> totalStudents;

        student *stud = new student[totalStudents];

        for (int i = 0; i < totalStudents; i++) {
            std::cout << "\nEnter Name: ";
            std::cin >> name;
            std::cout << "\nEnter age: ";
            std::cin >> age;
            std::cout << "\nEnter Marks: ";
            std::cin >> marks;

            stud[i] = initiateStudent(name, age, marks);
            //std::cout << "\n Name: " << stud[i].name << "\n" << stud[i].marks;

        }

        student *topper = highestScore(&stud, totalStudents);

        //std::cout << "\nPrinting in Main : " << topper->name;
        std::cout<<std::endl << topper->name << " is the topper with " << topper->marks << " marks" << std::endl;


        delete[] stud;
        std::cin.get();

        return 0;
    }