2013-06-02 2 views
1

Я понятия не имею, почему следующее дает мне: * "ошибка LNK2001: неразрешенный внешний символ 'struct Win32Vars_t win32' (? Win32 @@ 3UWin32Vars_t @@ A)" * Если я начну новый проект и создайте этот заголовочный файл, который он компилирует. Я также создать еще один-структуру, подобную этой, и это также компилируется нормально (хотя вместо «экстерном -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 

Что это с сообщением cryptic @@ 3U в скобках?

Извините за создание еще одного сообщения о нерешенных внешних. Я делал некоторое чтение перед рукой и пробовал разные вещи. Из того, что я читал, это C способ делать что-то, но должен по-прежнему работать на C++. И да, файл .h установлен на компиляцию C/C++.

+0

Вы не определяете 'win32' в любом месте, не так (нет, нет). –

+1

Что касается странных символов в названии, читайте о [название mangling] (https://en.wikipedia.org/wiki/Name_mangling). –

+1

В заголовке вы пообещали, что будет создана структура Win32Vars_t с именем win32. Тогда вы не предоставили его, и линкер сказал вам это. –

ответ

2

Это потому, что переменная «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

+0

Спасибо за ваш добрый ответ. Я действительно определял это где-то в другом месте, но я только что понял проблему с этим. Спасибо за пробежку в моей памяти! Вчера узнал о typedef и структурах ... извините за излишний вопрос. – Stradigos

Смежные вопросы