1

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

4

1 回答 1

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

于 2013-06-02T16:04:52.750 回答