C语言中的类型定义问题
我面临一个奇怪的问题,我在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
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引起