LNK2001: 未解析的外部符号结构 **
LNK 2001: Unresolve external symbol struct **
#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 刀变钝了),所以我定义了一个键值节点结构,然后是指向这些节点的指针数组。在 SO 上关于结构的前向声明的其他问题之后,我得到了声明指向结构内部结构的指针的语法,但由于某种原因,编译器 (Vis Studio) 正在对一个未解析的外部符号咳嗽,我不知道为什么。
您需要声明此数组的大小kvNode *keys[]; //our key array
如果编译时不知道大小,编译器怎么编译呢?它被声明为具有静态生命周期,因此必须为其指定固定大小,二进制文件中的固定内存块。我认为编译器将上面的行解释为声明而不是定义,因此 link 错误。
这是一个编译时问题,不是 link 时间问题。用这一行:
kvNode *keys[];
有几个问题。
首先,语法不正确:。应该是:
struct kvNode *keys[];
但这不会处理下一行,因为编译器将默认只使用单个项目大小的键[]
keys[arraylen] = { NULL };
建议:
struct kvNode *keys[ arraylen ];
即便如此,这一行:
keys[arraylen] = { NULL };
正在尝试设置将超过指针数组末尾的键[10]。因为在 C 中,数组索引从 0 而不是 1 开始,所以 keys[] 的有效索引是 0...9
强烈建议在编译时始终启用所有警告,然后修复这些警告。
强烈建议将编译步骤与 link 步骤分开执行,以便您可以轻松确定哪一步实际包含问题的根源
#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 刀变钝了),所以我定义了一个键值节点结构,然后是指向这些节点的指针数组。在 SO 上关于结构的前向声明的其他问题之后,我得到了声明指向结构内部结构的指针的语法,但由于某种原因,编译器 (Vis Studio) 正在对一个未解析的外部符号咳嗽,我不知道为什么。
您需要声明此数组的大小kvNode *keys[]; //our key array
如果编译时不知道大小,编译器怎么编译呢?它被声明为具有静态生命周期,因此必须为其指定固定大小,二进制文件中的固定内存块。我认为编译器将上面的行解释为声明而不是定义,因此 link 错误。
这是一个编译时问题,不是 link 时间问题。用这一行:
kvNode *keys[];
有几个问题。
首先,语法不正确:。应该是:
struct kvNode *keys[];
但这不会处理下一行,因为编译器将默认只使用单个项目大小的键[]
keys[arraylen] = { NULL };
建议:
struct kvNode *keys[ arraylen ];
即便如此,这一行:
keys[arraylen] = { NULL };
正在尝试设置将超过指针数组末尾的键[10]。因为在 C 中,数组索引从 0 而不是 1 开始,所以 keys[] 的有效索引是 0...9
强烈建议在编译时始终启用所有警告,然后修复这些警告。
强烈建议将编译步骤与 link 步骤分开执行,以便您可以轻松确定哪一步实际包含问题的根源