我不知道为什么以下给我:*“错误LNK2001:未解析的外部符号'struct Win32Vars_t win32'(?win32 @@ 3UWin32Vars_t @@ A)”*如果我启动一个新项目并创建此头文件编译好。我也在创建另一个与此类似的结构,它也编译得很好(虽然它不是“extern -variablename-”,但它是静态的。这应该不起作用吗?
win_local.h
#ifndef __WIN_LOCAL_H__
#define __WIN_LOCAL_H__
#include <windows.h>
void System_CreateConsole(void);
typedef struct {
HWND hWnd;
HINSTANCE hInstance;
} Win32Vars_t;
extern Win32Vars_t win32;
#endif
括号中隐藏的@@ 3U信息是什么?
很抱歉创建了另一篇关于未解决的外部因素的帖子。我事先做了一些阅读并尝试了各种各样的事情。从我读到的,这是C的做事方式,但仍然应该在C ++中工作。是的,.h文件设置为编译C / C ++。
答案 0 :(得分:3)
那是因为声明了一个“extern”变量但没有定义:你只是告诉编译器代码中的其他地方,有一个“Win32Vars_t win32”变量,它可以使用它。
只有“extern”,没有分配符号,这就是你得到一个未解决的符号的原因。
这意味着您必须在代码中的其他位置定义它。通常的模式是在头文件中使用“extern”,因此包含该头的每个其他文件都能够“看到”变量并在源文件(something.c)中定义变量,如下所示:
foo.h中
#ifndef FOO_H
#define FOO_H
extern int foo;
#endif
.C
#include "foo.h"
int foo;
您可以在此处找到有关外部变量的更多信息:http://en.wikipedia.org/wiki/External_variable