2011-01-13 9 views
0

입력 매개 변수로 3dimensional tfpairexp를 사용하는 클래스가 있습니다. 나중에 tfpairexp에서 값을 사용해야합니다.함수에 다차원 배열 전달

void calctfpairexp (int tf1, int tf2, double tfpairexp[][2][3]) 
{ 

    int ctr,c; 
    for (int j = 0; j < cchips && (c = chips[j].crepls); j += c) 
    { 
     int ctrl_no=0; 
     for (int *p = chips[j].ctrl ; p && (ctr=*p)>=0; ++p,ctrl_no++) { 

      for (int k = 0; k < c; ++k) 
      { 

       tfpairexp[j][ctrl_no][k]=interactionFunc(2,3,1); 
      } 
     } 
    } 

} 

나는 다음과 같은 클래스 내부의 메소드를 호출 calctfpairexp(tf1,tf2,tfpairexp); 그리고 난 다음 라인에 tfpairexp 내부 값을 사용해야합니다. 하지만 컴파일러는이 라인에 오류가 있습니다 :

`calctfpairexp(tf1,tf2,tfpairexp);` 

그것은 calctfpairexp에 적합한 적당한 funciton를 찾을 수 있다고 말한다. 어떤 생각?

+0

'boost :: multi_array'와 같은 클래스를 사용 해본 적이 있습니까? – Philipp

+0

안녕하세요. 어떻게 사용해야합니까? – Pegah

답변

2

는 I, 즉 함수 선언에서 구문 오류 예상. 당신이 필요합니다

void calctfpairexp (int tf1, int tf2, double tfpairexp[][2][3]) 

배열 인덱스 물건 크기의 유형 체킹하기 위해 PARAM 선언자

+0

이 실수를 언급 해 주셔서 감사합니다. 예, 그것은 funciton의 문제를 해결했습니다. 하지만 여전히 함수를 호출 할 때 오류가 발생합니다. 그것은 그것이 적당한 funciton을 발견 할 수 없다고 말한다. tfpairexp = 새 이중 [cchips] [max_ctrl_no] [max_rep_no]; – Pegah

+0

'double (* tfpairexp) [2] [3] = 새로운 double [chips] [2] [3]'- 후행 차원은 상수 여야하며 함수가 예상하는 것과 일치해야합니다. 그렇지 않으면 '적절한 기능 없음'오류가 표시됩니다. –

0

그리고이 프로토 타입을 사용할 때? 3 차원 어레이의

void calctfpairexp (int tf1, int tf2, double *** tfpairexp) 

할당 :

int w = 4; 
int h = 5; 
int d = 10; 
double *** ary = new double ** [w]; 
for(int i=0; i<w; ++i){ 
    ary[i] = new double * [h]; 
    for(int j=0; j<h; ++j){ 
     ary[i][j] = new double [d]; 
    } 
} 

할당 해제 : 배열 PARAM 선언이 무효로

for(int i=0; i<w; ++i){ 
    for(int j=0; j<h; ++j){ 
     delete [] ary[i][j]; 
    } 
    delete [] ary[i]; 
} 
delete [] ary; 
+0

감사합니다. 이 방법은 calctfpairexp에 오류가 없습니다. 하지만 여기에 : double tfpairexp [cchips] [max_ctrl_no] [max_rep_no]; \t \t \t \t \t \t \t \t \t calctfpairexp (TF1, TF2, tfpairexp); calctfpairexp에 적합한 함수가 없다고 말합니다. – Pegah

+0

'new' 또는'malloc'을 사용하여 배열을 동적으로 할당 할 수 있습니다. – tibur

+0

멀티 문 배열을 단일 dim 배열에 대한 포인터 배열에 대한 포인터 배열로 바꾸는 의미를 완전히 바꿨습니다. 동일한 구문을 사용하여 액세스 할 수는 있더라도 동일한 것은 아닙니다. –

0

사용 참조 뒤에 오는 :

void calctfpairexp (int tf1, int tf2, double (&tfpairexp)[][2][3]); 
0

내가 GCC의 빠른 테스트를했다하고는 제공하지 않습니다 컴파일러 오류. 잘못된

[email protected]:~/Desktop$ g++ q1.cpp 
[email protected]:~/Desktop$ g++ --version 
g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 

아무것도 : 나는 소스 코드의 다른 부분을 가지고 있지 않기 때문에, 나는

double interactionFunc(int i, int j, int k) { return 0; } 
void calctfpairexp (int tf1, int tf2, double tfpairexp[][2][3]) 
{ 

    int ctr, c; 
    for (int j = 0; j < ctr; j += c) 
    { 
     int ctrl_no=0; 
     for (int k = 0; k < c; ++k, ctrl_no++) 
     { 

      tfpairexp[j][ctrl_no][k]=interactionFunc(2,3,1); 
     } 
    } 
} 

int main() 
{ 
    double d[1][2][3]; 
    calctfpairexp(1, 2, d); 
    return 0; 
} 

컴파일 결과를 꺼내. 나는 그것이 문제를 일으키는 선언이라고 생각하지 않는다. 다른 곳을보고 싶을 수도 있습니다.