【问题标题】:typedef stuct problem in CC中的typedef结构问题
【发布时间】:2011-03-24 01:37:06
【问题描述】:

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

typedef struct iRecActive{

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

}iRecAcitve_t;

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

:错误 C2065:“iRecActive_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

【问题讨论】:

  • 请注意,您不应为自己的类型/结构/类使用_t 后缀。
  • 最好为 typedef 标签和结构本身使用不同的名称。

标签: c struct scope typedef


【解决方案1】:

iRecAcitve_t 更改为iRecActive_t

【讨论】:

  • 作者使用 iRecAcitve_t 创建 typedef 结构的实例还能用吗?
  • 非常感谢,您确实扫描了我的代码。我很荒谬:D 再次感谢
  • @Kedar,是的,但是如果代码已经引用了 iRecActive_t,那么更改声明会更容易。
  • @Kedar,这就是我将引用破窗定理的地方。当你看到一个破窗户时,把它修好,否则你所有的窗户很快就会被打破。
【解决方案2】:

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

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

if(true) {
   iRecActive_t myRecActive;
   //calculations
   Mutex_Lock(somemutext);
   variable = 14;

这是不正确的:

if(true) {
   //calculations
   Mutex_Lock(somemutext);
   variable = 14;
   iRecActive_t myRecActive;

在最后一个示例中,您收到错误消息:非法使用此类型作为表达式 或其他一些类似的、非常有用的错误。

正确的问题在这里,但它被标记为重复(不是!): typedef stuct problem in C (illegal use of this type as an expression)

问候, 花道

【讨论】:

  • 这是完全相同的问题,只是发布了一条不同的错误消息,并且所写的内容使人们感到困惑。您的回答将是他应该在那里提出的问题的潜在答案,但不是t回答这个问题的问题。 (即您提供的技术方面没有问题,只是放置问题主要由 OP 引起)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多