Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 90, средняя оценка - 4.79
Skoi
16 / 16 / 1
Регистрация: 31.07.2009
Сообщений: 54
#1

Error LNK2001: неразрешенный внешний символ - C++

31.07.2009, 11:39. Просмотров 11601. Ответов 4
Метки нет (Все метки)

Помогите пожалуйста тупому нубу
Все неприятности начались после добавления дружественного класса -
C++
1
2
3
4
5
6
7
8
9
10
11
12
class KWnd 
{
    static HWND mhWnd;
    WNDCLASS wc;
    static HINSTANCE hInstance;
    static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    friend class wclass;
public:
    KWnd(HINSTANCE);
    void Initialize();
    WPARAM Run();
};
Пытаюсь получить доступ к приватным членам KWnd:

C++
1
2
3
4
5
HWND wclass::CreateStatic(int x, int y, int width, int height, LPWSTR label)
{
    return CreateWindowW(L"STATIC", label, WS_CHILD | WS_VISIBLE, x, y, 
        width, height, KWnd::mhWnd, 0, KWnd::hInstance, 0);
}
И вот тут, категорически не хочет линковаться -

C++
1
2
3
4
5
6
1>Компоновка...
1>kwnd.obj : error LNK2001: неразрешенный внешний символ ""private: static struct HWND__ * KWnd::mhWnd" (?mhWnd@KWnd@@0PAUHWND__@@A)"
1>wclass.obj : error LNK2001: неразрешенный внешний символ ""private: static struct HWND__ * KWnd::mhWnd" (?mhWnd@KWnd@@0PAUHWND__@@A)"
1>kwnd.obj : error LNK2001: неразрешенный внешний символ ""private: static struct HINSTANCE__ * KWnd::hInstance" (?hInstance@KWnd@@0PAUHINSTANCE__@@A)"
1>wclass.obj : error LNK2001: неразрешенный внешний символ ""private: static struct HINSTANCE__ * KWnd::hInstance" (?hInstance@KWnd@@0PAUHINSTANCE__@@A)"
1
Может кто подсказать где грабли?
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2009, 11:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Error LNK2001: неразрешенный внешний символ (C++):

Error LNK2001: неразрешенный внешний символ - C++
Доброго времени суток. Прочитал кучу страниц форума по поиску выданных, но так и не понял - что мне делать, имеется ошибка 1>Def.obj :...

Error LNK2001: неразрешенный внешний символ - C++
Приветствую. Пытался вшить кое-что в программу, в итоге получаю множество ошибок линковки. Вывод: Ошибка 7 error LNK1120:...

Error LNK2001: неразрешенный внешний символ - C++
Учусь по Страуструпу, решаю задание, нужно создать header файл и два cpp и заставить работать сообща. Почему-то VS12 матерится на...

Error LNK2001: неразрешенный внешний символ - C++
Скачал библиотеку ckhttp, подключил. Когда попытался скомпилировать пример с их сайта выдало ошибки: >111.obj : error LNK2001:...

Error LNK2001: неразрешенный внешний символ - C++
Всем привет. Столкнулся с ошибкой : error LNK2001: неразрешенный внешний символ. 1>------ Построение начато: проект: gama,...

Error LNK2001: неразрешенный внешний символ - C++
Приветствую. Подскажите пожалуйста почему программа не хочет компилироваться. Имеется заголовочный файл my.h extern int foo; ...

4
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
31.07.2009, 11:48 #2
ответ найдешь здесь
волшебные слова - статическое поле
1
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
31.07.2009, 12:13 #3
статические ф-ции класса не знают с каким экземпляром класса работать, т.е. по сути не владеют указателем this, посему нельзя смешивать статические и динамические данные.
1
Skoi
16 / 16 / 1
Регистрация: 31.07.2009
Сообщений: 54
08.08.2009, 12:51  [ТС] #4
2Охотник - Это очевидно)) Я канеш тупой, но не настолько. К тому же к вопросу это не имеет отношения.


Цитата Сообщение от Rififi Посмотреть сообщение
ответ найдешь здесь
волшебные слова - статическое поле
Спасибо, с этим разобрался. Но всё равно по другому переписал. Собственно пишу себе фреймворк для работы с формами, кнопками итп на винапи. В принципе, почти все сделал, осталось только события приделать. Кстати, по поводу событий. Первое что пришло в голову -
Event
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Event
{
public:
    static std::vector<void(*)()> *queue;
    static void Gateway()
    {
        std::vector<void(*)()>::iterator i;
        for (i=queue->begin(); i!=queue->end(); ++i) ((void (*)())*i)();
    }
    void operator+=(void(*CB)())
    {
        queue->push_back(CB);
    }
};


Это пока сырая заготовка. Как бэ юзер может подписаться на получение колбеков.
Ну а Gateway() вызывается из цикла сообщений.
Собственно вопрос, такая реализация сойдёт, или есть какие-то более модные методы реализации событий?
0
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
08.08.2009, 13:03 #5
Собственно вопрос, такая реализация сойдёт,
сойдёт, если не обращать внимания что оно не может байндиться в функциям-членам класса

[/i]или есть какие-то более модные методы реализации событий?[/I]
Boost.Signals2 - наиболее приближённая модель к .NET (которую я считаю очень удачной)

PS. А вообще, ты только что изобрёл паттерн Observer/Mediator
0
08.08.2009, 13:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2009, 13:03
Привет! Вот еще темы с ответами:

Error LNK2001: неразрешенный внешний символ - C++
Обязательными условиями задачи являются использование своих конструктора и деструктора. Среда программирования Visual Studio 2008. ...

Классы и методы, error LNK2001: неразрешенный внешний символ - C++
пожалуста, посмотрите код, и скажите почему вылетает данная ошибка? // lab.k.kurs.cpp: определяет точку входа для консольного...

Error LNK2001: неразрешенный внешний символ "_mainCRTStartup" - C++
здравствуйте. я новичок в программировании, и у меня такая проблема. в ms visual c++ 2010 express создаю проект -&gt; консольное приложение...

Error LNK2001: неразрешенный внешний символ "_main" - C++
1&gt;MSVCRT.lib(crtexe.obj) : error LNK2001: неразрешенный внешний символ &quot;_main&quot; Что это такое и как его убрать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru