c++中排序函数错误

C++ error in sort function

本文关键字:错误 函数 排序 c++      更新时间:2023-10-16

我正在为一个作业做一个学生记录系统。当尝试运行程序时,我得到错误:

"请求从'std::stringstream'转换为非标量类型"

它来自stringstream key = student[j].getLastName线。不知道哪里出了问题。

#include <sstream>
#include <iostream>
#include <fstream>
#include "Date.h"
#include "Address.h"
#include "student.h"

using namespace std;
int main(){
    string line;
    ifstream inputFile("studentdata.txt");
    bool keepGoing = true;
    Student *student = new Student[50];
    int i = 0;
    while(!inputFile.eof()){
        getline(inputFile, line);
        student[i].setInfo(line);
        i++;
    }
    int choice;
    cout << "A Heap of Students";
    while(keepGoing){ //This while loop creates the menu and asks for user input
        cout << "What would you like to do?" << endl;
        cout << "1. Print full report." << endl;
        cout << "2. Print simple report." << endl;
        cout << "3. Sort records." << endl;
        cout << "4. Quit" << endl;
        cin >> choice;
        //prints full student report
        if(choice == 1){
            for(int i = 0; i < 50; i++){ //Full print loop
                cout << student[i] << endl;
            }
            cout << endl;
            keepGoing = true;
        }
        //Just first and last name
        else if(choice == 2){
            cout << "First Last" << endl;
            for(int i = 0; i < 50; i++){ //Simple print loop
            cout << student[i].getFirstName() << " " << student[i].getLastName() << endl;
            }
            cout << endl; //formatting
            keepGoing = true;
        }
        //sort function
        else if(choice == 3){
            for(int j = 1; j < 50; j++){
                stringstream key = student[j].getLastName;
                int i = j - 1;
                while(i > 0 && student[i].getLastName > key){
                    student[i+1] = student[i];
                    i = i - 1;
                }
                Student[i + 1] = key;
            }
            for j = 1 to A.length
            key = A[j]
            i = j - 1
            while i > 0 and A[i] > key
            A[i + 1] = A[i]
            i = i - 1
            A[i + 1] = key
            keepGoing = true;
        }
        //quit
        else if(choice == 4){
    cout << "Goodbye!" << endl;
            keepGoing = false;
        }
    }
        return 0;
}

当您执行stringstream key = student[j].getLastName时,您尝试从getLastName复制创建一个新的stringstream对象。现在,getLastName可能是一个成员函数,所以编译器不知道如何从它构建stringstream

您可能希望用成员函数返回的值初始化stringstream,因此:

stringstream key(student[j].getLastName());