无法弄清楚如何将结构数组传递给函数

Can't figure out how to pass struct array to function

我有一个头文件、主 cpp 文件和函数文件,我正在尝试将 stuct 数组从主函数传递到函数文件,但无法弄清楚语法。我已经剥离了完成的代码以显示我在做什么而没有显示数百行代码。

我已经尝试了我所知道的所有变体来传递结构数组,但它无法编译;我已经阅读了我能找到的所有内容,但找不到解决方案;我知道这只是我没有搞清楚的语法问题。

header.h 文件

#ifndef myHeader_h
#define myHeader_h


#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <sstream>


using namespace std;


struct MyStruct
{
    float var1;
    float var2;
    float var3;
};

struct MyStruct2
{
    string var4;
    string var5;
    bool var6;
    MyStruct struct1;
};


int enterFunction(int maxNumber, int & currentNumber, structList);

#endif

主程序

#include "myHeader.h"

int main()
{
    int currentNumber = 0, maxNumber = 0;

    MyStruct *structList;
    structList = new MyStuct[maxNumber];

    enterFunction(currentNumber, maxNumber, structList);
    return 0;
}

函数文件

#include "myHeader.h"

int enterFunction(int maxNumber, int & currentNumber, structList)
{
// DO MORE STUFF HERE
}

您应该使用 RAII 来管理资源,而不是容易出错的手动内存管理。 C++ 对此有 std::vector,它让生活变得更轻松。我猜函数 enterFunction 应该从文件或键盘读取一些结构,所以任务是创建一个输入值列表。您可以传递对向量的引用:

int enterFunction(int maxNumber, int & currentNumber, std::vector<MyStruct2>& structlist);

但是,我会将签名更改为 return 具有输入值的向量。这使得函数更容易理解和推理:

std::vector<MyStruct2> enterFunction(int maxNumber) {
    std::vector<MyStruct2> inputs;
    // let's assume that >> is overloaded for MyStruct2
    while (inputs.size() < maxNumber) {
        MyStruct2 x;
        cin >> x;
        inputs.push_back( std::move(x) );
    }

    return inputs;
}

请注意,这不会将矢量复制为 return 值,因为它使用命名 return 值优化。

在您的 header.h 文件中,而不是

int enterFunction(int maxNumber, int & currentNumber, structList);

你需要

int enterFunction(int maxNumber, int & currentNumber, MyStruct * structList);

在你的函数文件中,同样你需要

int enterFunction(int maxNumber, int & currentNumber, MyStruct * structList)

就是这样!

顺便说一下,像那样将 using namespace std(或任何 using 指令)放入 header 文件中是危险的。如果他们必须包含您的 header,它可能会破坏其他人的代码。最好将其放入您的 C 文件中。 (即使没有人会包含您的 header,养成这种习惯也是一个坏习惯。)参见 this Whosebug question