【问题标题】:Unresolved External Symbol (again)未解析的外部符号(再次)
【发布时间】:2013-06-02 15:35:25
【问题描述】:

我不知道为什么下面的代码给了我:*"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 消息是什么意思?

很抱歉又写了一篇关于未解决的外部问题的帖子。我之前确实做了一些阅读并尝试了各种事情。根据我的阅读,这是 C 的做事方式,但仍应在 C++ 中工作。是的,.h 文件设置为编译 C/C++。

【问题讨论】:

  • 你没有在任何地方定义win32,是吗(不,你没有)。
  • 至于名称中的怪异字符,请阅读name mangling
  • 在标题中您承诺将提供一个名为 win32 的 Win32Vars_t 结构。然后你没有提供它,链接器告诉你。

标签: c++ unresolved-external


【解决方案1】:

这是因为“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

【讨论】:

  • 感谢您的友好回复。我确实在其他地方定义了它,但我刚刚意识到一个问题。谢谢你唤醒我的记忆!昨天刚刚了解了 typedef 和结构......对于多余的问题感到抱歉。
猜你喜欢
  • 2011-02-09
  • 2015-06-27
  • 2021-12-04
  • 2020-04-10
  • 2018-05-22
  • 2021-03-25
相关资源
最近更新 更多