【问题标题】:Cannot convert double - new operator无法转换双新运算符
【发布时间】:2012-12-13 14:48:51
【问题描述】:

我遇到了一段代码问题。我在 C 程序中有这一行:

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

地点:

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

我需要在 C++ 中执行此操作,但我使用的是“new”运算符:

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

地点:

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

我收到以下错误:

错误:无法在赋值中将“double*”转换为“double”

完整功能:

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]);

}
}

希望有人可以提供帮助:)

【问题讨论】:

    标签: c++ arrays memory-management


    【解决方案1】:
    mel[i] = new double(sizeof(double)*mellength[i]);
    

    没有按照你的想法做 - 它分配了 一个双精度,其值为 sizeof(double)*mellength[i]

    要分配一个数组,你需要

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

    Sample

    两个版本不等价:

    double *mel = new double[16];
    

    在 C++ 中声明了一个double 的数组,而

    double *mel[16];
    

    声明一个指向double的指针数组。当您尝试取消引用 C++ 变量时,您会返回一个 double,因此您当然不能将它分配给 new 的返回值。

    【讨论】:

    • 感谢您的回复:)!我将代码更改为您建议的代码,但出现错误:在赋值中仍无法将“double *”转换为“double”。这可能与我在 main 中设置变量的方式有关吗?例如“双*梅尔=新双[16];”然后将其传递给函数
    • @Phorce 你想要一个 double 数组(来自 C++ 的声明)还是一个指向 double 的指针数组(来自 C 的声明)?
    • 我发送一个指向函数的指针数组,然后我调整它们的大小。所以指针[0],指针[1]..,get的大小调整了,然后我必须将值复制到这些双精度中.我正在转换 C 代码,我不知道他们为什么改变了函数内部 mel[i] 的大小。我现在很困惑
    • @Phorce 没有回答我的问题。如果您在回答问题时遇到问题,可能是您对要求的理解不够充分。
    • 我解释的不好。我相信这是一个指向 C 的双重声明的指针数组。虽然,我不确定。我猜它是一个二维数组,然后在函数中调整大小?真的很抱歉
    【解决方案2】:

    你要找的是

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

    您最初对new 的使用会尝试分配一个double 并在括号中为其指定值。

    【讨论】:

      猜你喜欢
      • 2014-01-21
      • 2015-11-09
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 2012-01-27
      • 2016-11-11
      相关资源
      最近更新 更多