c:未知类型名称

时间:2015-05-25 17:37:42

标签: c raspberry-pi

我有以下代码(在main.c中)初始化头文件(phOsal.h)中的typedef结构。

的main.c

#include <phOsal.h>
...
phOsal_RPi_DataParams_t osal;
...

phOsal.h

/**
* \brief RPi osal parameter stucture
*/
typedef struct
{
    uint16_t wId;            /**< ID of this component, do not modify */
    /* Other stuff */
    uint8_t * bLEDPins;
    uint8_t bLEDCount;

    uint8_t * bDIPSWPins;
    uint8_t bDIPSWCount;

    uint8_t bCommDev_ResetPin;
} phOsal_RPi_DataParams_t;

当我使用cmake命令cmake ./Sourcemake编译它时,我收到编译错误。

error: unknown type name 'phOsal_RPi_DataParams_t'

如果我发表评论,该程序编译正常。同样在main.c中还有其他DataParams被声明和使用但不会抛出编译器错误。

我在这里已经阅读了很多问题,但似乎没有任何问题,并尝试了以下内容。

  • 检查#ifndef#define是否正确
  • 将布局更改为struct dataparams {...};,然后使用main.c
  • struct dataparams osal;中将其调用
  • 将包含更改为&#34;&#34;而不是&lt;&gt;

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:-3)

选项是将结构声明为:
typedef struct phOsal_RPi_DataParams_t { ... }phOsal_RPi_DataParams_t;
当您在声明示例中使用typedef对结构进行别名时,请查看此处:
http://en.wikipedia.org/wiki/Struct_(C_programming_language)#typedef

如果你想要&#34; dataparams&#34;别名然后执行以下操作:

typedef struct phOsal_RPi_DataParams_t
{

 ...
} dataparams;

然后在main.c中抛弃结构并将其声明为:

dataparams osal;

您所声明的地点和主要地点的顺序可能是错误的,因为评论者建议,是的,包括应该在&#34;&#34;保持这一点。这是一个很好的榜样:
Unknown type name with typedef struct in C

因评论而编辑。