我不知道为什么下面会给我:*“error LNK2001: unresolved external symbol '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 消息是怎么回事?
很抱歉又写了一篇关于 Unresolved external 问题的帖子。我确实事先做了一些阅读并尝试了各种方法。根据我的阅读,这是 C 的做事方式,但在 C++ 中仍然有效。是的,.h 文件设置为编译 C/C++。
最佳答案
那是因为声明了一个“extern”变量但没有定义:你只是告诉编译器你的代码中的其他地方有一个“Win32Vars_t win32”变量并且它可以使用它。
只有“外部”,没有分配任何符号,这就是为什么你会得到一个未解析的符号。
这意味着您必须在代码的其他地方定义它。通常的模式是在头文件中使用“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
关于c++ - 未解析的外部符号(再次),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16884320/