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