English 中文(简体)
标题档案中似乎未穿过哪类建筑?
原标题:typedefs of structs not seeming to go through in header files?
  • 时间:2009-10-09 01:56:21
  •  标签:

我感到有些麻烦的是,在一张头盔档案中,有些草药类的申报似乎没有进入我的执行档案。

具体来说,我有以下几类定义:类型、价值、 Integer、Sting和Float。 他们都是用同样的方式从结构名称中挑选出来的。 I m 撰写一份非正式的<代码>hashCode功能,以补充一个参考所有这些数据的表一m设计。 工作类型和价值证明,但Integer/Float/String没有适当工作,我可以说明原因。

我很抱歉,这个问题很少涉及,但我试图不提供太多或太少的信息,也许这给各位专家带来太困难。

我首先要谈谈草原功能(请不要让我fl笑它是如何令人厌恶的,我知道它不是所有伟大的,我确实不关心):

int hashCode(ST_HashSymbol *hash, Value *v)
{
        Type *t = v->type;

        switch (whichType(t->name))
        {
                case INTEGER:
                        Integer *i = (Integer *)v->innerValue;
                        return i->value % hash->capacity;

        case FLOAT:
        {
            Float *f = (Float *)v->innerValue;
            float val = f->value;
            long l = 0l;

            if (val  2 && j = 0; --j)
            {
                if (val >= pow(2, j - 22))
                {
                    val -= pow(2, j - 22);
                    l |= 1 capacity;
        }

                case STRING:
                        String *s = (String *)v->innerValue;
                        char *str = s->value;

                        int total = 0;

                        char *c;
                        for (c = str; *c !=   ; ++c)
                        {
                                total += *c;
                        }

                        return total % hash->capacity;

                default:
                        return -1;
        }
}

摘自“类型.h”标题档案,其中界定了所有类型。 值得注意的是,我还试图将“打字”和“构造”的定义合并为“一种说法”,但是,这并不奏效:

typedef struct _t Type;
typedef struct _v Value;

struct _t {
        char *name;
        struct _t *widerType;
};

struct _v {
        Type *type;
        void *innerValue;
};

Type *type(int);
int whichType(char *);
Type *getType(char *);

/**************************/
/* Actual ("inner") types */
/**************************/

typedef struct _str String;
typedef struct _int Integer;
typedef struct _fl Float;

struct _str {
        int length;
        char *value;
};

struct _int {
        int value;
};
struct _fl {
        float value;
};

在我执政时,我得到以下信息:

[kparting@dhcp-10-25-247-130 eq]$ make
gcc -o eq -Wall -g parser.c eq.c error.c hash.c symbols.c type.c -lm
hash.c: In function ‘hashCode’:
hash.c:33: error: expected expression before ‘Integer’
hash.c:34: error: ‘i’ undeclared (first use in this function)
hash.c:34: error: (Each undeclared identifier is reported only once
hash.c:34: error: for each function it appears in.)
hash.c:37: error: expected expression before ‘Float’
hash.c:38: error: ‘f’ undeclared (first use in this function)
hash.c:69: error: expected expression before ‘String’
hash.c:70: error: ‘s’ undeclared (first use in this function)
make: *** [eq] Error 1

正如我提到的那样,数据类型*和价值* 是有效的数据类型,但其他三个是t。

事先得到任何帮助。 我确信,这既涉及头号档案中的构件的位置,又可能(但极不可能)本身。

最佳回答

在C区,你只能在区块开始时宣布变数。 阁下:

Integer *i = (Integer *)v->innerValue;

试图宣布一个变量一,但在一个区块一开始即为而不是<>。 你们可以通过打开一个小块:

case INTEGER:
{
    Integer *i = (Integer *)v->innerValue;
    return i->value % hash->capacity;
}

......与其他<代码> 相类似。

问题回答

你不能在 case 块内声明变量。

这段话实际上没有entirely,。 见上文。 应帮助你清醒。





相关问题
热门标签