簡體   English   中英

無法弄清楚如何將結構數組傳遞給函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM