尝试传递结构类型的向量,但没有控制台输出

Trying to pass a vector of a struct type but no console output

提问人:Christian Whitehead 提问时间:11/29/2017 最后编辑:Christian Whitehead 更新时间:11/29/2017 访问量:59

问:

我正在读取一个文件并将数据存储在结构类型的向量中。我有 3 个不同的功能:

  1. readFile() // 读取一个文本文件,并获取一个名称和一周的工作时间。insert arg here
  2. bubbleSort('more arg') // 不言自明
  3. output('arg') // 输出所述向量的内容

功能原型:

void readFile(vector<Employee *> workers, int numOfEmployees);
void bubbleSort(vector<Employee *> workers, int numOfEmployees);
void output(vector<Employee *> workers, int numOfEmployees);

结构:

struct Employee
{
    string name;
    vector<int> hours;
    int totalHours;
}

主要:

vector<Employee *> workers;
int numOfEmployees = 0;

readFile(workers, numOfEmployees);
bubbleSort(workers, numOfEmployees);
output(workers, numOfEmployees);
cout << endl;

system("pause");
return 0;

read文件:

ifstream fin;
fin.open("empdata4.txt");
if (fin.fail())
{
    cout << "File failed to open.  Program will now exit.\n";
    exit(1);
}

fin >> numOfEmployees;
workers.resize(numOfEmployees);

for (int row = 0; row < numOfEmployees; row++)
{
    workers[row] = new Employee;
    workers[row]->hours.resize(7);

    fin >> workers[row]->name;

    for (int i = 0; i < 7; i++)
    {
        fin >> workers[row]->hours[i];
    }
}

出于显而易见的原因排除冒泡排序

输出:

 for (int i = 0; i < numOfEmployees; i++)
 {
     cout << workers[i]->name << " ";
     for (int x = 0; x < 7; x++)
     {
         cout << workers[i]->hours[x] << " ";
     }
     cout << endl;
 }

控制台输出是空白的,减去主输出,我想我在大多数情况下都设置正确,但我仍然不知道。感谢您的帮助!cout << endl;system("pause");

编辑:添加了函数原型和结构

C++ 函数 向量 结构 引用传递

评论

0赞 Some programmer dude 11/29/2017
请尝试创建一个最小、完整和可验证的示例来展示我们。包括函数标头(声明)。函数声明在这里实际上很重要!
0赞 Some programmer dude 11/29/2017
使用函数声明,问题很明显:您按值传递向量。这意味着矢量将被复制,您只处理副本,而不是原始副本。我建议你买几本好的初学者书,并阅读有关通过引用传递参数的信息。
0赞 Aurus Huang 11/29/2017
您的输入文件是什么样的?没有这个,我无法确定哪里出了问题。

答:

1赞 lamandy 11/29/2017 #1

将函数标头更改为

void readFile(vector<Employee *>& workers, int& numOfEmployees);
void bubbleSort(vector<Employee *>& workers, int& numOfEmployees);
void output(vector<Employee *>& workers, int& numOfEmployees);

如果没有引用 &,您将按值传递,因此您对函数中的向量和 int 所做的任何修改都不会影响 main 中的向量和 int,因此 main 中的向量始终为空。

更好的是,甚至不需要numOfEmployees。

void readFile(vector<Employee *>& workers);
void bubbleSort(vector<Employee *>& workers);
void output(vector<Employee *>& workers);

如果您需要员工人数,只需致电workers.size()