【发布时间】:2015-10-03 23:55:20
【问题描述】:
#include "stdafx.h"
#include <ctype.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
//typedef struct kvNode kvNode;
struct kvNode
{
char cKey[32];
uint32_t iValue;
struct kvNode *NEXT;
};
//Function declarations
void put(char *key[], int *value);
uint32_t get(char *key[]);
int del(char *key[]);
uint32_t hashkey(char *key);
void strUpper(char *);
const int arraylen = 10; //length of key array
kvNode *keys[]; //our key array
int main()
{
//Create array of pointers to kvNodes
keys[arraylen] = { NULL };
return 0;
}
我很确定这是返回错误的代码块。该错误发生在构建期间,并且是:
1>keyValue.obj : error LNK2001: unresolved external symbol "struct kvNode * * keys" (?keys@@3PAPAUkvNode@@A)
我想做的是在 C 中练习键值存储(毫无疑问,使用更多,容我们说,宽松语言最近让我的 C 刀变钝了),所以我定义了一个键值node 结构,然后是指向这些节点的指针数组。在 SO 上关于前向声明结构的其他问题之后,我得到了在结构内部声明指向结构的指针的语法,但由于某种原因,编译器(Vis Studio)在一个未解析的外部符号上咳嗽,我不知道为什么。
【问题讨论】:
-
这一行:
kvNode *keys[]; //our key array是否与您编译程序时一样?您在该行上方使用 typedef 进行了注释,因此该行应该是struct kvNode *keys[]; //our key array,但随后您的链接器会发出一个关于struct kvNode **keys的错误,该错误在您的源代码中不存在。那么,这是产生错误的实际代码吗? -
是的,克里斯明白了,编译器需要知道数组的大小,这是有道理的,但我的程序必须朝着不同的方向发展。
标签: c struct key-value key-value-coding