2012-12-13 4 views
0

코드 조각에 문제가 있습니다.이중 새 연산자를 변환 할 수 없습니다.

mel[i] = malloc(sizeof(double)*mellength[i]); 

: 나는 C 프로그램에서이 라인이

double *mel[16]; 
int mellength[16]; 

을 그리고 나는 그러나 나는 "새로운"연산자를 사용하고 C++에서이 작업을 수행 할 필요가 :

mel[i] = new double(sizeof(double)*mellength[i]); 

을 장소 :

int *mellength = new int[16]; 
double *mel = new double[16]; 

그리고 다음 오류가 발생합니다.

error: cannot convert ‘double*’ to ‘double’ in assignment

전체 기능 :

void setup_Mel(int fft_size, int sample_rate, int *melstart, int *mellength, double *mel) 
{ 

double fmax; 
double dphi; 
double fsample; 
double freq; 
double temp[fft_size/2]; 

fmax=2595*log10(8000.0f/700+1); 
dphi = fmax/17; 
freq = (double)sample_rate/fft_size; 

for(int i=0; (i < 13); i++) 
{ 
    melstart[i] = fft_size/2; 
    mellength[i] = 0; 

    memset(temp, 0, sizeof(double)*fft_size/2); 
    for(int j=0; (j < fft_size/2); j++) 
    { 
     fsample = 2595*log10(freq*j/700 + 1); 

     if((dphi * i <= fsample) && (fsample < dphi*(i+1))) 
     { 
      temp[j] = (fsample-dphi*i)/(dphi*(i+1)-dphi*i); 
     } 

     if ((dphi*(i+1) <= fsample) && (fsample < dphi*(i+2))) 
     { 
      temp[j] = (fsample-dphi*(i+2))/(dphi*(i+1)-dphi*(i+2)); 
     } 

     if ((temp[j] != 0) && (melstart[i] > j)) 
     { 
      melstart[i] = j; 
     } 

     if (temp[j] != 0) mellength[i]++; 
    } 

    mel[i] = new double(sizeof(double)*mellength[i]); 

} 
} 

희망의 사람 :

+2

'std :: vector <>'를 사용하십시오. – GManNickG

답변

3
mel[i] = new double(sizeof(double)*mellength[i]); 

당신이 무슨 생각하지 않습니다 도움이 될 수 있습니다 -이 값 sizeof(double)*mellength[i]하나의 이중를 할당 .

double *mel = new double[16]; 
C++에서

double의 배열을 선언 , 반면

:

는 두 가지 버전이 동등하지 않은

mel[i] = new double[mellength[i]]; 

Sample

필요 했어, 배열을 할당하려면

double *mel[16]; 

double에 대한 포인터의 배열을 선언합니다. C++ 변수를 역 참조하려고하면 double이 반환되므로 new의 반환에 할당 할 수 없습니다.

+0

답장을 보내 주셔서 감사합니다 :)! 나는 당신이 제안한 코드를 바꿨는데, 나는 오류를 얻는다. 할당에서 여전히 'double'을 'double'로 바꿀 수 없다. main에 변수를 설정하는 것과 관련이 있을까? 예 : "더블 * 멜 = 새로운 더블 [16];" 그런 다음 함수에 전달하십시오. – Phorce

+0

@Phorce 두 배의 배열 (C++의 선언) 또는 double의 포인터 배열 (C의 선언)을 원하십니까? –

+0

함수의 포인터 배열을 보낸 다음 크기를 조정합니다. 포인터 [0], 포인터 [1] ...., 크기를 조정 한 다음이 두 배로 값을 복사해야합니다. 나는 C 코드를 변환하고 있는데 왜 함수 안에서 멜의 크기가 바뀌 었는지 모르겠다. 나는 지금 당황하다 – Phorce

2

당신이 찾고있는

mel[i] = new double[mellength[i]]; 

new의 원래 사용이 하나의 double를 할당하고 그것을 괄호에 가치를 부여하려고 할 것입니다.

관련 문제