Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/67: Рейтинг темы: голосов - 67, средняя оценка - 4.70
16 / 16 / 2
Регистрация: 31.07.2009
Сообщений: 54
1

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

31.07.2009, 11:39. Просмотров 13973. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2009, 11:39
Ответы с готовыми решениями:

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

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

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

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

4
MCSD: APP BUILDER
8787 / 1065 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
31.07.2009, 11:48 2
ответ найдешь здесь
волшебные слова - статическое поле
1
1662 / 1131 / 80
Регистрация: 21.08.2008
Сообщений: 4,725
Записей в блоге: 1
31.07.2009, 12:13 3
статические ф-ции класса не знают с каким экземпляром класса работать, т.е. по сути не владеют указателем this, посему нельзя смешивать статические и динамические данные.
1
16 / 16 / 2
Регистрация: 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
MCSD: APP BUILDER
8787 / 1065 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
08.08.2009, 13:03 5
Собственно вопрос, такая реализация сойдёт,
сойдёт, если не обращать внимания что оно не может байндиться в функциям-членам класса

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

PS. А вообще, ты только что изобрёл паттерн Observer/Mediator
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2009, 13:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Error LNK2001: неразрешенный внешний символ
имеется ошибка 1&gt; Создается библиотека .\ReleaseMinSize/AddIn.lib и объект...

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

Error LNK2001: неразрешенный внешний символ
Приветствую. Подскажите пожалуйста почему программа не хочет компилироваться. Имеется...

Error LNK2001: неразрешенный внешний символ
Всем привет. Столкнулся с ошибкой : error LNK2001: неразрешенный внешний символ. 1&gt;------...


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

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

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