【问题标题】:Illegal use of type as expression非法使用类型作为表达式
【发布时间】:2012-09-27 08:53:14
【问题描述】:

我的源代码中有以下行导致错误

错误 C2275: 'HPDF_Array' : 非法将此类型用作表达式" : 这是头文件中的实际代码:

 typedef struct _HPDF_Array_Rec  *HPDF_Array;

typedef struct _HPDF_Array_Rec {
    HPDF_Obj_Header  header;
    HPDF_MMgr        mmgr;
    HPDF_Error       error;
    HPDF_List        list;
} HPDF_Array_Rec;

    HPDF_Array id;

如何解决此错误?

【问题讨论】:

  • _HPDF_Array_Rec 定义了吗?这是你的真实代码吗?
  • 不,这实际上是一个名为“libharu”的开源项目的一部分。
  • 我不认为这实际上是你的问题的原因,但定义一个名为 _HPDF_Array_Rec 的符号是未定义的行为。

标签: c compiler-errors libharu


【解决方案1】:

此代码适用于我的编译器 (gcc 4.7.1),因此如果您仍然遇到问题,可能需要显示更多代码或一般信息:

// content of this struct is irrelevant, so I just made a dummy struct
struct _HPDF_Array_Rec {
    int dummy;
};


typedef struct _HPDF_Array_Rec  *HPDF_Array;
HPDF_Array id;

您问题中的代码所做的是将类型 HPDF_Array 定义为指向类型 struct _HPDF_Array_Rec 的指针并实例化一个 HPDF_Array (这是一个指向名为 id 的 _HDPF_Array_Rec 结构的指针


编辑:

代码仍然可以正常工作。我用谷歌搜索了错误代码并得到了这个:

http://msdn.microsoft.com/en-us/library/76c9k4ah(v=vs.71).aspx

An expression uses the -> operator with a typedef identifier.

检查您的代码是否存在此类错误。你在哪里做 HPDF_Array->something 而不是 id->something ? :)

【讨论】:

  • 我刚刚用更多代码更新了我的问题,这可能会更加清晰。是否可以对同一个结构进行 typedefs - 一个定义一个不定义?
【解决方案2】:

如果您在编译hpdf_pdfa.c 文件时遇到错误,请移动

HPDF_Array id;

HPDF_PDFA_GenerateID(HPDF_Doc pdf) 函数开头的行。

似乎 2.2.1 分支是作为 C++ 代码构建的,提交者没有注意到错误。在主干分支中,此错误已修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 2021-02-16
    • 2012-04-11
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2021-10-27
    • 2013-06-07
    相关资源
    最近更新 更多