[英]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);
但是,我將更改簽名以返回帶有輸入值的向量。 這使得該函數更易於理解和推理:
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;
}
請注意,這不會復制向量作為返回值,因為它使用命名返回值優化。
在您的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
文件中。 (即使沒有人會包含您的標頭,這也是一個不好的習慣。)請參閱此stackoverflow問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.