传递向量的正确方法是什么?

What is the proper way of passing a vector?

本文关键字:方法 是什么 向量      更新时间:2023-10-16

我是10年级的学生,老师希望我们使用指针创建一个原创项目

我要做的是创建成员并能够按成员的名字排序并打印它们

当我运行我的代码时,它显示无效访问

<我> Team.h
#ifndef TEAM_H
#define TEAM_H
#include "Staff.h"
#include <vector>
#include <iostream>
using std::vector;
class Team: public Staff
{
    public:
        Team();
        ~Team();
        vector<Staff *> &getVector();
    private:
        vector<Staff *> myStaffs;
};
#endif // TEAM_H
<我> Team.cpp
    Team::Team()
    {
        for(unsigned int iStaff = 0; iStaff < myStaffs.size(); iStaff++)
        {
            myStaffs[iStaff] = createStaff(iStaff);
        }
    }
    vector<Staff*>& Team::getVector()
    {
        return myStaffs;
    }

命令类将对团队进行排序并打印所有团队成员

<我> Command.cpp
void Command::printStaffs(vector<Staff*>&myStaffs)
{
    for(unsigned int iStaff = 0; iStaff < myStaffs.size(); iStaff++)
    {
        std::cout << "Staff ID number: "<<  myStaffs[iStaff]->getStaId()    << std::endl
                  << "Staff Skills 1: " << *myStaffs[iStaff]->getStaSkill() << std::endl
                  << "Staff Skills 2: " << *myStaffs[iStaff]->getStaSkill() << std::endl
                  << "Staff Skills 3: " << *myStaffs[iStaff]->getStaSkill() << std::endl
                  << std::endl;
    }
}
<我> Command.h
#ifndef CommandH
#define CommandH
#include "Team.h"
#include <vector>
#include <iostream>
using std::vector;
class Command: public Team
{
    public:
         Command(){}
        ~Command(){}
        void sortVector(vector<Staff* >&vectorTemp);
        void printStaffs(vector<Staff* >&);
    private:
        vector<Staff *> vectEmployee;
};
//--------------------------------------------------------------------------
#endif
<我> main.cpp
#include <iostream>
#include <conio.h>
#include "Team.h"
#include "Command.h"

int main()
{
    Team t;
    Command c;
    c.printStaffs(t.getVector());
    getch();
    return 0;
}
<我> Staff.h
#ifndef STAFF_H
#define STAFF_H
#include <cstdlib>
#include <ctime>
#include <string>
using std::rand;
class Staff
{
    public:
        Staff();
        ~Staff();
        static Staff* createStaff(int); // creates staffs
        int** getStaSkill();
        int getStaId();            // returns Staff ID
        static int genRanNum(int); //Generate random number
    private:
        int *staSkill[3];
        int staId;
        //int staDeptAsigned;
};
#endif
<我> Staff.cpp
#include "Staff.h"
Staff::Staff()
{
    *staSkill = new int[3];
}
Staff *Staff::createStaff(int s)
{
    Staff *staff = new Staff();
    staff->staId = s;
    *(staff->staSkill[0]) = genRanNum(10);
    *(staff->staSkill[1]) = genRanNum(10);
    *(staff->staSkill[2]) = genRanNum(10);
    return staff;
}
int** Staff::getStaSkill()
{
    return staSkill;
}
int Staff::getStaId()
{
    return staId;
}
int Staff::genRanNum(int num)
{
    return 1 +(std::rand()%num);
}
Staff::~Staff(){}

当您构造一个Team时,您有以下构造函数:

Team::Team()
{
    for(unsigned int iStaff = 0; iStaff < myStaffs.size(); iStaff++)
    {
        myStaffs[iStaff] = createStaff(iStaff);
    }
}

但是,myStaffsTeam的成员,并且默认构造为空,因此自myStaffs.size() == 0以来这里没有发生任何事情。

在此Team::getVector()上调用printStaffs将正确地通知您vector为空:

int main()
{
    Command c;
    Team t; // t.myStaffs will be empty
    c.printStaffs(t.getVector()); // passes an empty vector to printStaffs
    return 0;
}

可能想要传递一个数字给您的Team构造函数来创建那么多staff:

Team::Team(int number_of_staff)
{
    for(unsigned int iStaff = 0; iStaff < number_of_staff; iStaff++)
    {
        myStaffs.push_back(createStaff(iStaff));
    }
}
int main()
{
    Command c;
    Team t(5); // t.myStaffs will contain 5 staff members
    c.printStaffs(t.getVector()); // passes vector of 5 staff
    return 0;
}