C++ Can';我不知道如何将结构数组传递给函数
我有一个头文件、主cpp文件和函数文件,正在尝试将一个stuct数组从主函数传递到函数文件,但无法理解语法。我已经剥离了代码来显示我正在做什么,而没有显示数百行代码 我已经尝试了我知道的每一个变体来传递结构数组,但它不会编译;我已经阅读了所有我能在上面找到的东西,却找不到解决办法;我知道这只是一个语法问题,我还没弄明白 header.h文件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 <
#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的一个用例。编译得非常完美!这就是我需要的。谢谢