该声明没有存储或类型说明符

时间:2013-09-04 03:11:07

标签: c storage-class-specifier

我有这个功能:

void bs_gmm(IMG in_img,struct bs_gmm_var *gmm_ctxt,IMG *bg_msk,IMG *bg_img)

我在其中声明了一些变量:

int num_models,num_features;
float lr,update_factor;
float deviation_thresh;
int std_dev_int;

当我尝试定义或使用这些变量时,问题就是:例如:

num_models=gmm_ctxt->num_models;

我遇到两个错误:

  1. 关于num_models

    This declaration has no storage class or type specifier
    
  2. gmm_ctxt

    gmm_ctxt is undefined
    
  3. 我知道局部变量默认是 auto 存储类,我也指定了变量的类型;为什么会出现这种错误?

    函数调用来自main(),它位于另一个源文件中。

    我知道我在监督某些事情。请原谅我的无知。

    我在头文件中声明了上述功能,并将其包含在两个相关的源文件中。

    结构bs_gmm_var在标题中声明,我将它包含在两个相关的源文件中。声明如下

    typedef struct bs_gmm_var
    {
    MEAN mean;
    STD_DEV std_dev;
    WEIGHT weight;
    CLASSIFICATION_STATE classification_state;
    RANK rank;
    RANK_INDEX rank_index;
    
    int *match_array;
    float *prob_feature;
    
    int num_models;
    float lr;
    float update_factor;
    float deviation_thresh;
    float assign_thresh,dying_thresh;
    float std_dev_int;
    
    int intialize_state;
    
    int width;
    int height;
    int num_features;
    int num_frames;
    };
    

    然后我在main函数中声明了一个指向上面结构的指针。这个指针和另一个结构被发送到以下函数。

    结构bs_gmm_var在下面显示的函数中定义:

    void intialize_params(struct bs_gmm_var **gmm_ctxt,struct config_params bs_config_params)
    {
    struct bs_gmm_var *gmm_stats;
    int width=bs_config_params.width;
    int height=bs_config_params.height;
    int num_features=bs_config_params.num_features;
    int num_models=bs_config_params.num_models;
    
    // Allocate memroy for whole structure
    gmm_stats = (bs_gmm_var *)malloc(sizeof(bs_gmm_var));
    
    gmm_stats->mean=(float*)calloc(num_models*num_features*width*height,sizeof(float));
    .
        .In this way i have allocated memory for other members(from mean to prob_feature)
        .
    gmm_stats->prob_feature=(float *)malloc(num_features*sizeof(float));
    
    
    gmm_stats->num_models=bs_config_params.num_models;
    gmm_stats->lr= bs_config_params.lr;
    .In this way other members(from num_models to num_frames)are also defined
        .
        gmm_stats->num_frames=bs_config_params.num_frames;
    
    *gmm_ctxt = gmm_stats;
    }
    

    正如您所看到的,这通过指针gmm_stats定义了结构bs_gmm_var。 现在,我已经发送到上述函数的指针作为结构的地址(通过指针gmm_stats)定义。我将它发送给函数的指针:

    void bs_gmm(IMG in_img,struct bs_gmm_var *gmm_ctxt,IMG *bg_msk,IMG *bg_img)
    

1 个答案:

答案 0 :(得分:0)

两个错误都指向struct bs_gmm_var未定义。确保包含正确的头文件,或在代码中定义该函数之前的结构。

要确认结构的定义,通过预处理器运行代码并查看输出可能会有所帮助。使用gcc的{​​{1}}使用相同的编译器标志(用于链接的标记除外)。