未解决的外部符号(再次)

时间:2013-06-02 15:35:25

标签: c++ unresolved-external

我不知道为什么以下给我:*“错误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 ++。

1 个答案:

答案 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