【问题标题】:Unknown type name uint32/uint16未知类型名称 uint32/uint16
【发布时间】:2012-03-26 06:05:27
【问题描述】:

在此头文件中,我收到错误:未知类型名称 uint32,uint16。我是 Objective-C 的新手,我正在尝试在 Xcode 中导入一个项目。由于上述问题,构建失败。谷歌没有帮助。尝试在标题搜索路径中添加/stdint/stdint.hxcode unknown type nameunknown type name 'uint8_t', MinGWXcode - how to include c library and header file to cocoa project?)。构建仍然失败。

   /*-------------------------------------------------------------------------
     *
     * block.h
     *    POSTGRES disk block definitions.
     *
     *
     * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
     * Portions Copyright (c) 1994, Regents of the University of California
     *
     * $PostgreSQL: pgsql/src/include/storage/block.h,v 1.26 2010/01/02 16:58:08 momjian Exp $
     *
     *-------------------------------------------------------------------------
     */
    #ifndef BLOCK_H
    #define BLOCK_H

    /*
     * BlockNumber:
     *
     * each data file (heap or index) is divided into postgres disk blocks
     * (which may be thought of as the unit of i/o -- a postgres buffer
     * contains exactly one disk block).  the blocks are numbered
     * sequentially, 0 to 0xFFFFFFFE.
     *
     * InvalidBlockNumber is the same thing as P_NEW in buf.h.
     *
     * the access methods, the buffer manager and the storage manager are
     * more or less the only pieces of code that should be accessing disk
     * blocks directly.
     */
    typedef uint32 BlockNumber;

    #define InvalidBlockNumber      ((BlockNumber) 0xFFFFFFFF)

    #define MaxBlockNumber          ((BlockNumber) 0xFFFFFFFE)

    /*
     * BlockId:
     *
     * this is a storage type for BlockNumber.  in other words, this type
     * is used for on-disk structures (e.g., in HeapTupleData) whereas
     * BlockNumber is the type on which calculations are performed (e.g.,
     * in access method code).
     *
     * there doesn't appear to be any reason to have separate types except
     * for the fact that BlockIds can be SHORTALIGN'd (and therefore any
     * structures that contains them, such as ItemPointerData, can also be
     * SHORTALIGN'd).  this is an important consideration for reducing the
     * space requirements of the line pointer (ItemIdData) array on each
     * page and the header of each heap or index tuple, so it doesn't seem
     * wise to change this without good reason.
     */
    typedef struct BlockIdData
    {
        uint16      bi_hi;
        uint16      bi_lo;
    } BlockIdData;

【问题讨论】:

    标签: objective-c xcode xcode4.2


    【解决方案1】:

    uint32 应该是 UInt32。您需要调整名称或:

    typedef UInt32 uint32;
    typedef uint32 BlockNumber;
    

    【讨论】:

    • UInt32 也是非标准的。 uint32_t 是要使用的(它在 C99 中定义,尽管它是可选的,但它应该在每个系统上都可用)。
    【解决方案2】:

    通常应该使用的类型命名为uint32_t(这些在C99 中定义,头文件stdint.h)。所有其他都是非标准的,如果可以的话,应该避免。现在在你的情况下,你不能避免非标准类型。因此,为了使您的代码能够编译,您需要将非标准名称映射到标准名称,如下所示:

    typedef uint32_t uint32;
    

    您需要为 PostgreSQL 中使用的所有类型添加此映射。一种方法是将它们添加到您的预编译头文件 (.pch) 中,或者在包含 PostgreSQL 头文件之前使用您 #include 的这些 typedef 创建头文件。

    【讨论】:

    • 我有一个与socklen_t 未知类型名称类似的问题。此变量在 socket.h 中定义,但不在工作区中。我尝试在标题搜索路径中添加路径,但没有任何改变。
    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 2014-11-19
    • 2018-10-27
    • 2016-09-16
    • 2012-04-03
    • 2017-01-09
    相关资源
    最近更新 更多