c++ - 未解析的外部符号(再次)

标签 c++ unresolved-external

我不知道为什么下面会给我:*“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/

相关文章:

c++ - 运算符重载时出现 Unresolved external 错误,即使在定义了所有方法之后

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - 设计界面

c++ - std::to_string 不是使用 CygWin 的 C++11 中的成员

c++ - 在没有 -DNDEBUG 和 -O3 的情况下编译时,标准库实现不使用断言有什么原因吗?

c++ - 在 C++ 中支持基于模式的不断发展的 XML 的技术

c++ - "Unresolved external _WinMain@16"如果我将 WndProc 移动到另一个 cpp 文件

c++ - 编写按字典顺序添加新元素的链接函数的更短/更有效的方法

c++ - 如何在 Visual Studio 中读取 Unresolved external symbol 错误?

java - LuaJava编译错误 "Unresolved external symbol"