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

时间:2018-12-01 22:32:01

标签: c++ arrays function structure header-files

我有一个头文件,主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
}

2 个答案:

答案 0 :(得分:2)

您应该使用RAII来管理资源,而不是易于出错的手动内存管理。 C ++为此提供了def move(disk , from_rod, to_rod, aux_rod): if disk >= 1: move(disk-1, from_rod, aux_rod, to_rod) print ("Move disk", disk, "from rod", from_rod, "to rod", to_rod) move(disk-1, aux_rod, to_rod, from_rod) n = 3 move(n, 'A', 'B', 'C') ,它使生活变得更加轻松。我猜想函数std::vector应该从文件或键盘中读取许多结构,因此任务将是创建输入值列表。您可以传递对向量的引用:

enterFunction

但是,我将更改签名以返回带有输入值的向量。这使函数更易于理解和推理:

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

请注意,这不会复制向量作为返回值,因为它使用命名返回值优化。

答案 1 :(得分:0)

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

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

您需要

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

同样,您也需要在Functions文件中

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

就是这样!

顺便说一句,将using namespace std(或任何using指令)放在这样的头文件中是很危险的。如果其他人必须包含您的标头,则可能会破坏其他人的代码。最好将其放入您的C文件中。 (即使没有人会包含您的标头,这也是一种不好的习惯。)请参阅this stackoverflow question