gpt4 book ai didi

c - 此声明没有存储或类型说明符

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:21 25 4
gpt4 key购买 nike

我有这个功能:

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

我知道局部变量默认是 auto 存储类,而且我已经指定了变量的类型;为什么会出现此类错误?

函数调用来自另一个源文件中的 main()

我知道我正在监督某事。原谅我的无知。

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

结构 bs_gmm_var 在 header 中声明,我已将其包含在相关的两个源文件中。声明如下

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;
};

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

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)

最佳答案

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

要确认结构的定义,通过预处理器运行代码并查看输出会有所帮助。对于 gcc,即 gcc -E ... 使用相同的编译器标志(用于链接的除外)。

关于c - 此声明没有存储或类型说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18604789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com