Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的类型定义问题_C_Struct_Scope_Typedef - Fatal编程技术网

C语言中的类型定义问题

C语言中的类型定义问题,c,struct,scope,typedef,C,Struct,Scope,Typedef,我面临一个奇怪的问题,我在C头文件中定义了一个结构: typedef struct iRecActive{ char iRecSID[32]; unsigned char RecStatus; int curSel; }iRecAcitve_t; 但是,当我在另一个文件中使用相同的结构时,编译器无法识别该结构,即使我已仔细检查是否包含了它的头文件。错误如下: :错误C2065:'IRecative\u t':未声明的标识符 下面是我定义结构的文件的完整代码 #ifn

我面临一个奇怪的问题,我在C头文件中定义了一个结构:

typedef struct iRecActive{

    char iRecSID[32];
    unsigned char RecStatus;
    int curSel;

}iRecAcitve_t;
但是,当我在另一个文件中使用相同的结构时,编译器无法识别该结构,即使我已仔细检查是否包含了它的头文件。错误如下:

:错误C2065:'IRecative\u t':未声明的标识符

下面是我定义结构的文件的完整代码

#ifndef _TS_HTTP_APPLICATION_H_
#define _TS_HTTP_APPLICATION_H_

#ifdef __cplusplus
extern "C"
{
#endif

typedef struct iRecActive{

    char iRecSID[32];
    unsigned char RecStatus;
    int curSel;

}iRecAcitve_t;

int startHTTPServer(int HTMLserverPort);
int closeHTTPServer();

int openTS_SegmenterN();
void pushTSDataN(unsigned char* TSData, int len);
void closeTS_SegmenterN();

void removeAllConnections();

#ifdef __cplusplus
}
#endif

#endif

将iRecacitive更改为iRecacitive。

我试图找到类似问题的解决方案,但在堆栈上找不到。我把答案留给其他人,以节省他们的时间:

因为它是C,所以不能在需要的地方创建变量。它们必须在语句开头创建。所以这是正确的:

if(true) {
   iRecActive_t myRecActive;
   //calculations
   Mutex_Lock(somemutext);
   variable = 14;
这是不正确的:

if(true) {
   //calculations
   Mutex_Lock(somemutext);
   variable = 14;
   iRecActive_t myRecActive;
在上一个示例中,您会收到错误消息:非法使用此类型作为表达式 或者其他类似的非常有用的错误

正确的问题在这里,但它被标记为重复,它不是

问候,,
Ikeban

请注意,您不应该为自己的类型/结构/类使用后缀。最好为typedef标记和结构本身使用不同的名称。如果作者使用iRecAcitve\t创建typedef结构的实例,它仍然可以工作?非常感谢,您确实扫描了我的代码。我又是一个荒谬的人:Dthanks@Kedar,是的,但是如果代码已经引用了IRecative,那么更改声明就更容易了。@Kedar,这就是我将引用破窗定理的地方。当你看到一个坏掉的窗口时,修复它,否则你所有的窗口都会很快坏掉。这是完全相同的问题,只是发布了一条不同的错误消息,就像上面写的一样,把人们弄糊涂了。。你的回答可能是他应该问的问题的潜在答案,但不是这个问题的答案。i、 e.您提供的技术方面没有问题,只是放置问题主要由OP引起