(40分快速结贴) 如何在一个h文件中引用另外一个h文件定义的类型

影子传说_Hades 2010-05-18 10:01:40
目前我定义了一个头文件
psd-parse-struct.h

typedef struct {
long hole_layer_begin_posi;
long hole_layer_end_posi;
guint32 mask_layer_start; /* Mask & layer block start address */
guint32 mask_layer_len; /* Mask & layer block length */
gboolean transparency;
guint32 layer_data_len;
guint32 layer_data_start;
gint16 num_layers;
PSDlayer** lyr_a;//内部指针数组
} PSDHoleLayerBlock


因为PSDlayer类型是在这个是在psd.h中定义的

所以psd-parse-struct.h编译报错 expected specifier-qualifier-list before PSDlayer

我如何解决这个问题
#import这个指令GCC已经不推荐使用了

时间比较紧张,求助一下。多谢了

...全文
734 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArtiFly2000 2010-05-18
  • 打赏
  • 举报
回复
expected specifier-qualifier-list before PSDlayer

PSDlayer这个类型没有定义,直接include头文件就可以了
如果要include的头文件包含的无关内容太多,那就拆分头文件吧
cattycat 2010-05-18
  • 打赏
  • 举报
回复
还是头文件包含的问题,用到什么结构,在哪声明的就包含哪个文件。
arong1234 2010-05-18
  • 打赏
  • 举报
回复
所谓的“源代码”在什么文件中?
[Quote=引用 11 楼 mysticality 的回复:]
换句话说吧,就是为啥源代码里面不用任何include编译就不报错呢?
[/Quote]
huanmie_09 2010-05-18
  • 打赏
  • 举报
回复
单独的头文件不需要编译。
你包含了头文件,编译器编译时会自动将该头文件的内容扩展到你包含的位置,一起进行编译.
#include "psd.h"试试
影子传说_Hades 2010-05-18
  • 打赏
  • 举报
回复
换句话说吧,就是为啥源代码里面不用任何include编译就不报错呢?
影子传说_Hades 2010-05-18
  • 打赏
  • 举报
回复
在没有我自定义头文件的时候
psd.h源代码没有任何的include编译可以通过

但我自定义头文件中include psd.h的时候,psd.h编译就出错了,这太离奇了吧


/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* GIMP PSD Plug-in
* Copyright 2007 by John Marshall
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#ifndef __PSD_H__
#define __PSD_H__

/* Temporary disable of save functionality */
#ifdef PSD_SAVE
#undef PSD_SAVE
#else
/* #define PSD_SAVE */
#endif

/* Set to the level of debugging output you want, 0 for none.
* Setting higher than 2 will result in a very large amount of debug
* output being produced. */
#define PSD_DEBUG 2
#define IFDBG(level) if (PSD_DEBUG >= level)

/* Set to FALSE to supress pop-up warnings about lossy file conversions */
#define CONVERSION_WARNINGS FALSE

#define LOAD_PROC "file-psd-load"
#define LOAD_THUMB_PROC "file-psd-load-thumb"
#define SAVE_PROC "file-psd-save"
#define PLUG_IN_BINARY "file-psd"

#define DECODE_XMP_PROC "plug-in-metadata-decode-xmp"

#define GIMP_PARASITE_COMMENT "gimp-comment"
#define GIMP_PARASITE_ICC_PROFILE "icc-profile"
#define GIMP_PARASITE_EXIF "exif-data"
#define GIMP_PARASITE_IPTC "iptc-data"

#define METADATA_PARASITE "gimp-metadata"
#define METADATA_MARKER "GIMP_XMP_1"

#define PSD_PARASITE_DUOTONE_DATA "psd-duotone-data"

/* Copied from app/base/gimpimage-quick-mask.h - internal identifier for quick mask channel */
#define GIMP_IMAGE_QUICK_MASK_NAME "Qmask"

#define MAX_RAW_SIZE 0 /* FIXME all images are raw if 0 */

/* PSD spec defines */
#define MAX_CHANNELS 56 /* Photoshop CS to CS3 support 56 channels */

/* PSD spec constants */

/* Layer resource IDs */

/* Adjustment layer IDs */
#define PSD_LADJ_LEVEL "levl" /* Adjustment layer - levels (PS4) */
#define PSD_LADJ_CURVE "curv" /* Adjustment layer - curves (PS4) */
#define PSD_LADJ_BRIGHTNESS "brit" /* Adjustment layer - brightness/contrast (PS4) */
#define PSD_LADJ_BALANCE "blnc" /* Adjustment layer - color balance (PS4) */
#define PSD_LADJ_BLACK_WHITE "blwh" /* Adjustment layer - black & white (PS10) */
#define PSD_LADJ_HUE "hue " /* Adjustment layer - old hue/saturation (PS4) */
#define PSD_LADJ_HUE2 "hue2" /* Adjustment layer - hue/saturation (PS5) */
#define PSD_LADJ_SELECTIVE "selc" /* Adjustment layer - selective color (PS4) */
#define PSD_LADJ_MIXER "mixr" /* Adjustment layer - channel mixer (PS9) */
#define PSD_LADJ_GRAD_MAP "grdm" /* Adjustment layer - gradient map (PS9) */
#define PSD_LADJ_PHOTO_FILT "phfl" /* Adjustment layer - photo filter (PS9) */
#define PSD_LADJ_EXPOSURE "expA" /* Adjustment layer - exposure (PS10) */
#define PSD_LADJ_INVERT "nvrt" /* Adjustment layer - invert (PS4) */
#define PSD_LADJ_THRESHOLD "thrs" /* Adjustment layer - threshold (PS4) */
#define PSD_LADJ_POSTERIZE "post" /* Adjustment layer - posterize (PS4) */

/* Fill Layer IDs */
#define PSD_LFIL_SOLID "SoCo" /* Solid color sheet setting (PS6) */
#define PSD_LFIL_PATTERN "PtFl" /* Pattern fill setting (PS6) */
#define PSD_LFIL_GRADIENT "GdFl" /* Gradient fill setting (PS6) */

/* Effects Layer IDs */
#define PSD_LFX_FX "lrFX" /* Effects layer info (PS5) */
#define PSD_LFX_FX2 "lfx2" /* Object based effects layer info (PS6) */

/* Type Tool Layers */
#define PSD_LTYP_TYPE "tySh" /* Type tool layer (PS5) */
#define PSD_LTYP_TYPE2 "TySh" /* Type tool object setting (PS6) */

/* Layer Properties */
#define PSD_LPRP_UNICODE "luni" /* Unicode layer name (PS5) */
#define PSD_LPRP_SOURCE "lnsr" /* Layer name source setting (PS6) */
#define PSD_LPRP_ID "lyid" /* Layer ID (PS5) */
#define PSD_LPRP_BLEND_CLIP "clbl" /* Blend clipping elements (PS6) */
#define PSD_LPRP_BLEND_INT "infx" /* Blend interior elements (PS6) */
#define PSD_LPRP_KNOCKOUT "knko" /* Knockout setting (PS6) */
#define PSD_LPRP_PROTECT "lspf" /* Protected setting (PS6) */
#define PSD_LPRP_COLOR "lclr" /* Sheet color setting (PS6) */
#define PSD_LPRP_REF_POINT "fxrp" /* Reference point (PS6) */

/* Vector mask */
#define PSD_LMSK_VMASK "vmsk" /* Vector mask setting (PS6) */

/* Parasites */
#define PSD_LPAR_ANNOTATE "Anno" /* Annotation (PS6) */

/* Other */
#define PSD_LOTH_SECTION "lsct" /* Section divider setting - Layer goups (PS6) */
#define PSD_LOTH_PATTERN "Patt" /* Patterns (PS6) */
#define PSD_LOTH_GRADIENT "grdm" /* Gradient settings (PS6) */
#define PSD_LOTH_RESTRICT "brst" /* Channel blending restirction setting (PS6) */
#define PSD_LOTH_FOREIGN_FX "ffxi" /* Foreign effect ID (PS6) */
#define PSD_LOTH_PATT_DATA "shpa" /* Pattern data (PS6) */
#define PSD_LOTH_META_DATA "shmd" /* Meta data setting (PS6) */
#define PSD_LOTH_LAYER_DATA "layr" /* Layer data (PS6) */

/* Effects layer resource IDs */
#define PSD_LFX_COMMON "cmnS" /* Effects layer - common state (PS5) */
#define PSD_LFX_DROP_SDW "dsdw" /* Effects layer - drop shadow (PS5) */
#define PSD_LFX_INNER_SDW "isdw" /* Effects layer - inner shadow (PS5) */
#define PSD_LFX_OUTER_GLW "oglw" /* Effects layer - outer glow (PS5) */
#define PSD_LFX_INNER_GLW "iglw" /* Effects layer - inner glow (PS5) */
#define PSD_LFX_BEVEL "bevl" /* Effects layer - bevel (PS5) */

/* PSD spec enums */
影子传说_Hades 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 huanmie_09 的回复:]
GimpRGB这个类型是在哪个头文件里声明的?
也include进来.
[/Quote]

这个是gimp的源码包中的代码,如果我不定义我的头文件编译不报错的
huanmie_09 2010-05-18
  • 打赏
  • 举报
回复
GimpRGB这个类型是在哪个头文件里声明的?
也include进来.
影子传说_Hades 2010-05-18
  • 打赏
  • 举报
回复
非常奇怪,如果我的自定义不用included,psd-parse-struct.h
编译报错 expected specifier-qualifier-list before PSDlayer

如果在我自定义的psd-parse-struct.h中 #include<psd.h>会导致
源代码 psd.h报错 expected specifier-qualifier-list before GimpRGB

psd.h


**********省略

/* PSD Channel data structure */
typedef struct
{
GimpRGB gimp_color; /* Gimp RGB color */
gint16 opacity; /* Opacity */
guchar ps_kind; /* PS type flag */
gint16 ps_cspace; /* PS colour space */
CMColor ps_color; /* PS colour */
} PSDchanneldata;

**********省略


huanmie_09 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mysticality 的回复:]
用了import会导致
#import is a deprecated GCC extension

并且被引用的头文件也出错啦
[/Quote]
用#include "psd.h"试试.
昵称很不好取 2010-05-18
  • 打赏
  • 举报
回复
java中引入包是用import,C/C++引入头文件是include
影子传说_Hades 2010-05-18
  • 打赏
  • 举报
回复
用了import会导致
#import is a deprecated GCC extension

并且被引用的头文件也出错啦
b_duan 2010-05-18
  • 打赏
  • 举报
回复
在前面#include psd.h 有什么问题嘛?
huanmie_09 2010-05-18
  • 打赏
  • 举报
回复
psd-parse-struct.h这个头文件里前面加一句:
#include<psd.h>

import貌似是java的写法
arong1234 2010-05-18
  • 打赏
  • 举报
回复
头文件为什么要#import?不是一直是#include么?
设备树(device tree)机制是Linux内核从linux-3.x版本开始引进的一种机制,目的是解决内核源码的arch/arm目录下代码混乱的问题:随着ARM生态的快速发展,在内核源码的arch/arm目录下,存放着几十种arm芯片和几百个开发板相关的源文件,很多开发板和处理器的断、寄存器等相关硬件资源都在这个目录下以.c或.h的文件格式定义。而对于内核来说,与这些硬件耦合,会导致内核代码混乱不堪,每个开发板上运行的内核镜像都必须单独编译配置,无法通用。什么时候Linux内核能像Windows镜像那样,无论你的电脑什么配置,一个Windows安装包,都可以直接下载安装运行呢?设备树机制,实现了Linux内核和硬件平台的解耦:每个硬件平台的硬件资源使用一个设备树文件(xxx.dts)来描述,而不是在arch/arm下以.c 或 .h 文件定义。Linux内核是一个通用的内核,在启动过程,在通过解析设备树的硬件资源来初始化某个具体的平台。 引入设备树后,很多和内核驱动开发的工作也发生了变化:以往驱动工程师关注的头文件定义、寄存器定义,现在这些基本上不用关注,关注的重点则转向了如何根据硬件平台去配置和修改设备树文件。很多驱动的编程接口也发生了变化,开始慢慢使用device tree提供的编程接口去开发驱动。本期课程主要面向嵌入式开发人员,享Linux下驱动开发所需要的设备树知识和必备技能

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧