2015-11-14 34 views
1

我有一個函數:爲什麼不能像這樣傳遞參數?

int getCaseNum(float isovalue,float *F,int **point,int *dims,float *F_value) 
{ 

int digtial_point[8]; 
int case_num=0; 
int i = 0; 
for(i=0;i<8;i++) 
{ 
    F_value[i] = F[GetPointIndex(point[i],dims)]; 
    if(F_value[i]>isovalue) 
    { 
     digtial_point[i] = 1; 
     case_num = case_num + powf(2,i); 
    } 
    else 
    { 
     digtial_point[i] = 0; 
    } 


} 

return case_num; 

} 

然後我想調用這個函數在另一個這樣的功能:

int pointID[8][3]; 
int case_num = getCaseNum(isovalue,F,pointID,dims,F_value); 

然而,當我編譯我的代碼,它說:

/Users/liyuanliu/Documents/lecture/sicvis/final_6b/mc510/proj6B.cxx:862:24: error: 
    no matching function for call to 'getCaseNum' 
    int case_num = getCaseNum(isovalue,F,pointID,dims,F_value); 
        ^~~~~~~~~~ 
/Users/liyuanliu/Documents/lecture/sicvis/final_6b/mc510/proj6B.cxx:816:5: note: 
    candidate function not viable: no known conversion from 'int [8][3]' to 
    'int **' for 3rd argument 
int getCaseNum(float isovalue,float *F,int **point,int *dims,float *F_value) 
^ 

爲什麼會發生這種情況?我不能像這樣傳遞參數嗎?

+1

見[此](http://stackoverflow.com/questions/7586702/is-2d-array-a-double-pointer)問題。 – crayzeewulf

+1

有明顯的類型不匹配。 2D陣列不是雙指針。 –

回答

0
// Create a dynamic 2D int array 
int **pointID=new int*[8]; 
for(int i=0;i<8;i++) { 
    pointID[i]=new int[3]; 
} 
int case_num=getCaseNum(isovalue,F,pointID,dims,F_value); 
0

您需要獲取指向2D數組中第一個條目的指針。 由於陣列是連續的,則可以使用下面的邏輯進行迭代

int getCaseNum(float isovalue,float *F,int* point,int *dims,float *F_value) 
{ 

    for (i = 0; i < 24; i++) 
    { 
     cout << *(point+i*sizeof(int)); 
    } 
} 

caller: 

int case_num = getCaseNum(isovalue,F,&pointID[0][0],&dims,F); 
相關問題