【发布时间】:2013-09-04 03:11:06
【问题描述】:
我有这个功能:
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;
我收到两个错误:
-
关于
num_models:This declaration has no storage class or type specifier -
和
gmm_ctxt:gmm_ctxt is undefined
我知道局部变量默认是 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;
};
然后我在主函数中声明了一个指向上述结构的指针。这个指针和另一个结构一起被发送到下面的函数。
结构体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)
【问题讨论】:
-
第二个错误指向结构
gmmctxt未定义。因此出现第一个错误 - 因为它是未定义的,所以成员num_models没有任何存储或类型。您能否发布gmmctxt类型的定义并确保包含其标题? -
@praveen 你能显示
struct bs_gmm_var吗?? -
我在做 codegolf 时看到了这个警告。该程序将触发它:
a; main(){return 0;},因为a变量是使用 implicit int 行为声明的。我认为我们需要查看SSCCE 才能找到您错过声明的位置。 -
由于您定义了参数
gmm_ctxt,因此gmmctxt很可能是gmm_ctxt的简单拼写错误(反之亦然)。看来您在拼写“update”时也有问题(它没有拼写为“updtae”)。鉴于您显示的代码,另一个问题没有意义(int num_models似乎包含类型说明符),因此问题可能出在您未显示的代码中。 -
向我们展示整个函数定义,而不是孤立的部分。如果可能,请在仍然显示错误的情况下删除任何可以删除的内容。不要试图猜测你认为我们需要看到什么;如果您知道这一点,那么您现在已经自己解决了问题。