我感到有些麻烦的是,在一张头盔档案中,有些草药类的申报似乎没有进入我的执行档案。
具体来说,我有以下几类定义:类型、价值、 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。
事先得到任何帮助。 我确信,这既涉及头号档案中的构件的位置,又可能(但极不可能)本身。