2010-06-21 57 views
0

這是一個非常基本的問題。儘管如此,在線研究數十個半相關示例後,我還沒有找到解決方案。傳遞靜態二維數組的行以在C++中運行

我有一個二維數組,其大小在編譯時已知:double demPMFs[ NUM_DEM_PARAMS ][ NUM_AGE_CATEGORIES ]。數組條目在程序的早期由輸入文件填充。我想在程序中稍後將單個行作爲一維數組傳遞給函數。我非常喜歡保持獨立的名稱爲每一行:

#define LSPAN_PMF demPMFs[0][] 
#define FLEDGE_PMF demPMFs[1][] 
#define PAIR_PMF demPMFs[2][] 
#define BIRTH_AGE_PMF demPMFs[3][] 
#define SPLIT_AGE_PMF demPMFs[4][] 

(在這裏,NUM_DEM_PARAMS = 5;)。下面是一個失敗的嘗試傳遞一個函數的功能:

int calcDeath(double demPMFs[][ NUM_AGE_CATEGORIES ]) { 
    int age_death = rmultinom(LSPAN_PMF, NUM_AGE_CATEGORIES); 
    return age_death; 
} 

int rmultinom(const double p_trans[], int numTrans) 
    // ...[code snipped]... 
} 

我收到有關原型的編譯器錯誤;我預計也會遇到const聲明的問題。如果人們認爲他們是相關的,我可以詳細討論這些錯誤,但是我懷疑還有很多事情可以直接設定。

回答

2

而不是使用array[index][]的,使用array[index]

#define LSPAN_PMF demPMFs[0] 
// ... etc. 

但爲什麼混淆使用數組這麼多?使用命名索引會更清晰:

enum { 
    IndexLspan, 
    IndexFledge, 
    // ... 
}; 

int calcDeath(double demPMFs[][ NUM_AGE_CATEGORIES ]) { 
    int age_death = rmultinom(demPMFs[IndexLspan], NUM_AGE_CATEGORIES); 

繼續,爲什麼不首先使用C++標準庫中的容器?

+0

容器,你的意思是向量?我希望能夠使用預先存在的隨機數生成器,但是我想我也可以使它們超載來獲取向量輸入。感謝enum推薦;我沒有想到通過這麼深的B/C,它主要是在輸入蛋糕上結冰,可以這麼說。 – Sarah 2010-06-21 19:40:18

+0

雖然我不確切知道如何使用您的數據; 'vector'或'map',可能與使用結構相結合可能會使其更具可讀性。 – 2010-06-21 19:43:26