在功能中打印矢量

时间:2018-03-05 21:43:08

标签: c++ vector

我需要打印我在listInput中填充的向量。当我去listPrint时,程序崩溃了。我该怎么办才能解决这个问题?这是我的主要内容:

#include <iostream>
#include <string>
#include <vector>

#include "func.h"
using namespace std;

int main(int argc, char** argv) {
    subjects a;
    int r=1;
    while(r!=0){
        int select=a.userChoice();
        switch(select){
            case 1:
            a.listPrint();
            break;

            case 2:
            listInput(a);
            break;
        }
    }
    return 0;
}

我的标题:

#ifndef SUBJECT
#define SUBJECT

#include <string>
#include <vector>

class subjects{
    private:
        std::string subjectName;
        std::string lectName;
        std::string lectSurname;
        int credits;
        int studentnum;

    public:
    /*  subjects(){
            subjectName="";
            lectName="";
            lectSurname="";
            credits=0;
            studentnum=0;
        }*/
        int userChoice();
        int enterNumber(std::string name);
        void menu();
        std::string getSubjectName(){
            return subjectName;
        }
        std::string getLectName(){
            return lectName;
        }
        std::string getLectSurname(){
            return lectSurname;
        }
        int getCredits(){
            return credits;
        }
        int getStudentNum(){
            return studentnum;
        }
        friend void listInput(subjects a);
        void listPrint();
        bool checkName(std::string &text);
        std::vector<subjects*> entry;
        subjects(const std::string subjectName="", const std::string lectName = "", const std::string lectSurname="", const int credits = 0, const int studentnum = 0) : 
            subjectName(subjectName),
            lectName(lectName),   
            lectSurname(lectSurname),   
            credits(credits),   
            studentnum(studentnum){
}

};

#endif

我的功能文件:

    void listInput(subjects a){
        .
        .
        .
        a.entry.push_back(new subjects(a.subjectName, a.lectName,a.lectSurname,a.credits, a.studentnum));
        }

    void subjects::listPrint(){
        for(int i=0; i<entry.size(); i++){
            cout<<entry[i]->getSubjectName()<<" "<<entry[i]->getLectName()<<" "<<entry[i]->getLectSurname()<<" "<<entry[i]->getCredits()<<" "<<entry[i]->getStudentNum()<<endl;
        }

    }

我知道不推荐使用朋友功能,但我需要使用至少其中一个。此外,如果我在listInput中打印矢量,那么它只打印第一个条目。如果向量中有多个条目,它也会崩溃。

1 个答案:

答案 0 :(得分:0)

您将一个实例按值传递给列表函数,然后尝试打印它。如果计划在列表函数的范围之外使用它,则应考虑通过引用传递它。