2013-03-03 155 views
21

我無法理解如何將結構(通過引用)傳遞給函數,以便可以填充結構的成員函數。到目前爲止,我已經寫了:將結構傳遞給函數

bool data(struct *sampleData) 
{ 

} 

int main(int argc, char *argv[]) { 

     struct sampleData { 

     int N; 
     int M; 
     string sample_name; 
     string speaker; 
    }; 
     data(sampleData); 

} 

我得到的錯誤是:

C++需要一個類型說明符的所有聲明

我試圖 布爾數據(常量& testStruct)這裏解釋一些例子:Simple way to pass temporary struct by value in C++?

希望有人能幫助我。

+0

你正在傳遞一個類型名稱的函數而不是變量? – billz 2013-03-03 02:20:18

+0

這不是通過引用,那是通過指針。你沒有創建'sampleData'的實例,所以它沒有名字。另外,函數bool數據應該如何知道'sampleData'存在? – Rapptz 2013-03-03 02:21:12

+0

@billz'sampleData'是我的結構體的名稱。我希望能夠將此結構傳遞給我現在明白的函數 – Phorce 2013-03-03 02:21:14

回答

67

首先,你的數據的簽名()函數:

bool data(struct *sampleData) 

不可能工作,因爲參數缺乏的名稱。當你聲明你想要實際訪問的函數參數時,它需要一個名字。因此,它更改爲類似:

bool data(struct sampleData *samples) 

但在C++中,你並不需要使用struct在所有實際。因此,這可以簡單地變成:

bool data(sampleData *samples) 

其次,sampleData結構是不知道的數據()在這一點上。所以,你應該在這之前聲明它:

struct sampleData { 
    int N; 
    int M; 
    string sample_name; 
    string speaker; 
}; 

bool data(sampleData *samples) 
{ 
    samples->N = 10; 
    samples->M = 20; 
    // etc. 
} 

最後,你需要創建sampleData類型的變量。例如,在你的main()函數:

int main(int argc, char *argv[]) { 
    sampleData samples; 
    data(&samples); 
} 

請注意,您需要將變量的地址傳遞給數據()函數,因爲它接受一個指針。

但是,請注意,在C++中,您可以直接通過引用傳遞參數,並且不需要用指針「模擬」它。你可以這樣做:

// Note that the argument is taken by reference (the "&" in front 
// of the argument name.) 
bool data(sampleData &samples) 
{ 
    samples.N = 10; 
    samples.M = 20; 
    // etc. 
} 

int main(int argc, char *argv[]) { 
    sampleData samples; 

    // No need to pass a pointer here, since data() takes the 
    // passed argument by reference. 
    data(samples); 
} 
1
bool data(sampleData *data) 
{ 
} 

您需要告訴方法您正在使用哪種類型的結構。在這種情況下,sampleData。

注意:在這種情況下,您需要在方法之前定義結構以識別它。

例子:

struct sampleData 
{ 
    int N; 
    int M; 
    // ... 
}; 

bool data(struct *sampleData) 
{ 

} 

int main(int argc, char *argv[]) { 

     sampleData sd; 
     data(&sd); 

} 

注2:我是一個C的傢伙。可能有更多的C++方法來做到這一點。

+0

。 struct「sample_data」應該在函數本身之前? – Phorce 2013-03-03 02:22:57

+1

再一次,這不是通過引用,那是*通過指針*。 – Rapptz 2013-03-03 02:30:41