Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';我不知道如何将结构数组传递给函数_C++_Arrays_Function_Structure_Header Files - Fatal编程技术网

C++ Can';我不知道如何将结构数组传递给函数

C++ Can';我不知道如何将结构数组传递给函数,c++,arrays,function,structure,header-files,C++,Arrays,Function,Structure,Header Files,我有一个头文件、主cpp文件和函数文件,正在尝试将一个stuct数组从主函数传递到函数文件,但无法理解语法。我已经剥离了代码来显示我正在做什么,而没有显示数百行代码 我已经尝试了我知道的每一个变体来传递结构数组,但它不会编译;我已经阅读了所有我能在上面找到的东西,却找不到解决办法;我知道这只是一个语法问题,我还没弄明白 header.h文件 #ifndef myHeader_h #define myHeader_h #include <iostream> #include <

我有一个头文件、主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 enterFunction(int maxNumber, int & currentNumber, structList)
{
// DO MORE STUFF HERE
}
函数文件

#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 enterFunction(int maxNumber, int & currentNumber, structList)
{
// DO MORE STUFF HERE
}

您不应该使用容易出错的手动内存管理来管理资源。C++有了<代码> STD::vector < /代码>,它使生活变得简单多了。我想函数
enterFunction
应该从文件或键盘中读取大量结构,因此任务是创建一个输入值列表。您可以传递对向量的引用:

int enterFunction(int maxNumber, int & currentNumber, std::vector<MyStruct2>& structlist);
int enterFunction(int-maxNumber、int¤tNumber、std::vector&structlist);
但是,我会更改签名以返回带有输入值的向量。这使函数更易于理解和推理:

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;
}
std::vector enterFunction(int maxNumber){
向量输入;
//让我们假设>>对于MyStruct2是重载的
while(inputs.size()>x;
输入。推回(标准::移动(x));
}
返回输入;
}

请注意,这不会将向量复制为返回值,因为它在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
指令)放在这样的头文件中是危险的。如果其他人必须包含您的标题,则可能会破坏他们的代码。最好把它放在
C
文件中。(即使没有人会包含你的标题,这也是一个坏习惯。)参见。

你收到了什么错误消息?这将有助于您识别问题。您将大小为0的数组传递给函数(该函数无法调整其大小)…当使用像这样的
std::vector
时,
maxNumber
currentNumber
可能都是不必要的。这就是为什么
std::vector
rocks!我同意vector rocks,但对于该程序的用户需求,它必须是一组结构(不是我的选择)。:-)@RockRat您可以将指向向量数据的指针传递给遗留代码或C代码。这是vector的一个用例。编译得非常完美!这就是我需要的。谢谢