[問題] 有關 error: unknown type name 的問題
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux, CentOS 7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC 4.8.5
問題(Question):
小弟遇到一個 error: unknown type name 問題。懇請大家幫忙。
小弟用 asn1c 把 Wireshark 原始碼裡面,某個協定的 .asn 編譯出解碼程式原始碼,
它同時也會產出 makefile 。
小弟下 make 編譯解碼程式時,出現以下錯誤:
$ make
CC out/libasncodec_la-ProtocolIE-Container.lo
In file included from out/SourceNodeID-Extension.h:15:0,
from out/SourceNodeID.h:16,
from out/ProtocolExtensionField.h:59,
from out/ProtocolExtensionContainer.h:1815,
from out/COUNTvalue.h:50,
from out/Bearers-SubjectToStatusTransfer-Item.h:16,
from out/ProtocolIE-Field.h:19,
from out/ProtocolIE-Container.h:1100,
from out/ProtocolIE-Container.c:8:
out/ProtocolIE-SingleContainer.h:22:1: error: unknown type name
'Bearers_SubjectToStatusTransfer_ItemIEs_t'
typedef Bearers_SubjectToStatusTransfer_ItemIEs_t
ProtocolIE_SingleContainer_127P0_t;
^
於是,我看了 out/ProtocolIE-SingleContainer.h 裡面是這樣寫的:
/* Including external dependencies */
#include "ProtocolIE-Field.h"
#ifdef __cplusplus
extern "C" {
#endif
/* ProtocolIE-SingleContainer */
typedef Bearers_SubjectToStatusTransfer_ItemIEs_t
ProtocolIE_SingleContainer_127P0_t;
其中 Bearers_SubjectToStatusTransfer_ItemIEs_t 其實有宣告在
ProtocolIE-Field.h 裡面,
並且 ProtocolIE-Field.h 也有被 ProtocolIE-SingleContainer.h include 。
ProtocolIE-Field.h 裡面有 Bearers_SubjectToStatusTransfer_ItemIEs_t 的宣告:
/* ProtocolIE-Field */
typedef struct Bearers_SubjectToStatusTransfer_ItemIEs {
ProtocolIE_ID_t id;
Criticality_t criticality;
struct Bearers_SubjectToStatusTransfer_ItemIEs__value {
Bearers_SubjectToStatusTransfer_ItemIEs__value_PR present;
union Bearers_SubjectToStatusTransfer_ItemIEs__value_u {
Bearers_SubjectToStatusTransfer_Item_t
Bearers_SubjectToStatusTransfer_Item;
} choice;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} value;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} Bearers_SubjectToStatusTransfer_ItemIEs_t;
理論上,像 typedef a b 這種語法,我的理解是宣告 b 是 a 的別名。
也就是說在其他地方宣告:
b x;
意思跟:
a x;
是一樣的。
而如果 a 有在其它 .h 裡面宣告,而 .h 也有被 include ,
typedef a b 會出現 error: unknown type name 是很奇怪的事。
也可能小弟的理解有誤。
小弟能力有限,實在看不出這個錯誤所在,哪裡有問題。
因此,想請問大家有遇過這種問題嗎?或能指導小弟此段程式問題出在哪裡?
謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.252.179 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1652521453.A.E52.html
→
05/14 18:22,
2年前
, 1F
05/14 18:22, 1F
→
05/14 18:22,
2年前
, 2F
05/14 18:22, 2F
→
05/14 18:22,
2年前
, 3F
05/14 18:22, 3F
→
05/14 18:23,
2年前
, 4F
05/14 18:23, 4F
→
05/14 18:23,
2年前
, 5F
05/14 18:23, 5F
推
05/15 20:10,
2年前
, 6F
05/15 20:10, 6F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章