需要生成一个检测数组中零的函数

时间:2018-03-20 11:51:37

标签: c++

我有这个代码但是没有用,它一直给我以下错误:

[Error] cannot convert 'float' to 'float*' for argument '1' to 'void zeroCrossing(float*, float*, int)'

[Error] cannot convert 'float*' to 'float' for argument '1' to 'bool getSign(float)'

[Error] cannot convert 'float*' to 'float' for argument '1' to 'bool getSign(float)'

[Error] invalid conversion from 'int' to 'float*' [-fpermissive]
#include <iostream>
#include <cstring>
using namespace std;

void zeroCrossing(float *data, float *zerCross, int nx);
bool getSign(float data);
float array[9] = {1,2,3,0,-1,-2,-3,0,1};
float *p = array;
float f1[9];
float *p2 = f1;
int bx= 2 ;

int main() {
    zeroCrossing(*p,*p2,bx);
    return 0 ;
}

/* zero crossing function */
/* data = input array */
/* zerCross = output zero crossing array */
void zeroCrossing(float *data[], float *zerCross[], int nx)
{
    int i;
    bool sign1, sign2;

    memset(zerCross, 0, nx*sizeof(float));//copies the 0  to the first characters of the string 
                                            //pointed to, by argument 

    for(i=0; i<nx-1; i++)     /* loop over data  */
    {
        sign1 = getSign(data[i]);
        sign2 = getSign(data[i+1]);
        if(sign1!=sign2)  /* set zero crossing location */
            zerCross[i+1] = 1;
    }
}
/* get sign of number */
bool getSign(float data)
{
    if(data>0)      /* positif data */
        return (1);
    else            /* negatif data */
        return (0);
}

2 个答案:

答案 0 :(得分:0)

当你进行编码时,你应该在一些代码行之后编译代码,除非你是专业人士。

关于您的代码我可以说两件事

  1. 功能声明:void zeroCrossing(float *data, float *zerCross, int nx);void zeroCrossing(float *data[], float *zerCross[], int nx)不一样。

  2. 变量名称:应避免使用array之类的名称,因为它们在标准库中使用。

  3. 这是我的解决方案,使您的代码可编辑

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    
    void zeroCrossing(float *data, float *zerCross, int nx);
    bool getSign(float data);
    
    float array_[9] = {1,2,3,0,-1,-2,-3,0,1};
    float* p = array_;
    float f1[9];
    float *p2 = f1;
    int bx= 2 ;
    
    /* get sign of number */
    bool getSign(float data)
    {
        if(data>0)      /* positif data */
            return (1);
        else            /* negatif data */
            return (0);
    }
    
    
    /* zero crossing function */
    /* data = input array */
    /* zerCross = output zero crossing array */
    void zeroCrossing(float *data, float *zerCross, int nx)
    {
        int i;
        bool sign1, sign2;
    
        memset(zerCross, 0, nx*sizeof(float));//copies the 0  to the first characters of the string
        //pointed to, by argument
    
        for(i=0; i<nx-1; i++)     /* loop over data  */
        {
            sign1 = getSign(data[i]);
            sign2 = getSign(data[i+1]);
            if(sign1!=sign2)  /* set zero crossing location */
                zerCross[i+1] = 1;
        }
    }
    
    int main() {
        zeroCrossing(p,p2,bx);
        return 0 ;
    }
    

答案 1 :(得分:0)

1 - 您应该最小化全局变量的数量,在您的情况下它是0 2 - *p指向存储在地址p中的值,因此在main函数中,当您调用zeroCrossing时,您需要传递地址,而不是值。

说实话,我不明白你想要做什么,但至少这段代码不会抛出错误:

#include <iostream>
#include <cstring>

using namespace std;

void zeroCrossing(float *data, float *zerCross, int nx);
bool getSign(float data);

int main()
{
    float array[9] = {1,2,3,0,-1,-2,-3,0,1};
    float *p = array;
    float f1[9];
    float *p2 = f1;
    int bx = 2 ;

    zeroCrossing(p, p2, bx);
    return 0 ;
}

/* zero crossing function */
/* data = input array */
/* zerCross = output zero crossing array */
void zeroCrossing(float *data, float *zerCross, int nx)
{
    int i;
    bool sign1, sign2;

    memset(zerCross, 0, nx*sizeof(float));//copies the 0  to the first characters of the string 
                                            //pointed to, by argument 
    for(i=0; i<nx-1; i++) { /* loop over data  */
        sign1 = getSign(data[i]);
        sign2 = getSign(data[i+1]);
        if(sign1!=sign2)  /* set zero crossing location */
            zerCross[i+1] = 1;
    }
}

/* get sign of number */
bool getSign(float data)
{
    if(data>0)      /* positif data */
        return (1);
    else            /* negatif data */
        return (0);
}