С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
21 / 4 / 2
Регистрация: 05.07.2015
Сообщений: 126
1

Ошибка: error LNK2019: unresolved external symbol

06.03.2016, 01:22. Показов 1412. Ответов 8
Метки нет (Все метки)

Здравствуйте,
Подскажите пожалуйста, у меня есть написанная программа на с++, она компилируется и все в порядке, но мне нужно его визуализировать при помощи WinAPI,
Я создала центральное диалоговое окно со списком меню, при нажатии на определенные кнопки должны вызываться функции из уже написанного класса Warehouse и отображаться на экране, в соответствующих ячейках,
Файл stdafx.h выглядит так: в нем включены все классы, которые нужны, и конфликтов нет,
#pragma once

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "targetver.h"
 
#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
 
// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include"ConstructMaterials.h"
#include"Visitor.h"
в Sklad.cpp я создала глобальные объекты:
C++
1
2
    Warehouse w;
    Visitor v(w);
Для того, чтоб склад не был пустой у меня есть функция, которая при старте присваивает данные, которые потом можно выводить на экран(собственно к чему я и стремлюсь):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void Warehouse::loadExistingData()
{
    Visitor v(*this);
    Goods*cement=new ConstructMaterials();
    cement->SetGoods("cement", 20, "Ukraine", "tn", 2016, 1, 25);
    cement->AddMe(v);
    Goods*pen=new OfficeStuff();
    pen->SetGoods("pen", 50, "Poland", "pcs", 2020, 1, 1);
    pen->AddMe(v);
    Goods*ink=new OfficeStuff();
    pen->SetGoods("ink", 50, "Finland", "pcs", 2016, 2, 17);
    pen->AddMe(v);
    Goods*Laundry=new HomeAppliances();
    Laundry->SetGoods("laundry", 2, "China", "pcs", 2017, 11, 2);
    Laundry->AddMe(v);
    Goods*microwave=new HomeAppliances();
    microwave->SetGoods("microwave", 5, "France", "pcs", 2014, 5, 8);
    microwave->AddMe(v);
    Goods*metal=new ConstructMaterials();
    metal->SetGoods("metalPipes", 50, "Russia", "tn", 2030, 1, 1);
    metal->AddMe(v);
}
но выдает ошибку:

1>Sklad.obj : error LNK2019: unresolved external symbol "public: void __thiscall Warehouse::loadExistingData(void)" (?loadExistingData@Warehouse@@QAEXXZ) referenced in function "int __stdcall MainScreen(struct HWND__ *,unsigned int,unsigned int,long)" (?MainScreen@@YGHPAUHWND__@@IIJ@Z)
Sklad\Debug\Sklad.exe : fatal error LNK1120: 1 unresolved externals

я не могу понять почему, эти объекты ведь видны, и соответственно я могу вызывать методы из под них, почему тут это проблема? Подскажите пожалуйста,

Огромное спасибо заранее,
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2016, 01:22
Ответы с готовыми решениями:

Error LNK2001 unresolved external symbol _strstr
не компилируется исходный код , пишет ошибки Error LNK2001 unresolved external symbol...

Unresolved external symbol
Начал учить API, немогу запустить программу выдает ошибку 1 unresolved external symbol #include...

Ошибка "unresolved external symbol _main" при создании окна
Здравствуйте! Подскажите как быть =) Вот код программы#include &quot;stdafx.h&quot; #include...

Исправить ошибку "unresolved external symbol _WinMain@16"
Системное программирование. Ошибки: Error 1 error LNK2019: unresolved external symbol _WinMain@16...

8
900 / 420 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
06.03.2016, 10:18 2
Лучший ответ Сообщение было отмечено Melany как решение

Решение

Так непонятно.
В каком файле объявлена и реализована Warehouse::loadExistingData? Добавлен ли он в проект?

Лучше всего выложи проект, а то объяснения могут затянуться на долго.
1
21 / 4 / 2
Регистрация: 05.07.2015
Сообщений: 126
06.03.2016, 10:53  [ТС] 3
rao, Реализация Warehouse::loadExistingData в самом cpp класса Warehouse
Я не смогла тут загрузить архив проекта - он большего размера чем тут разрешено, поэтому бросаю ссылку,

Спасибо огромное заранее

https://drive.google.com/file/... sp=sharing
0
5 / 5 / 1
Регистрация: 03.03.2016
Сообщений: 11
06.03.2016, 11:42 4
Так надо добавить заголовки в Sklad.cpp
C++
1
2
#include "Warehouse.h"
#include "Visitor.h"
1
900 / 420 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
06.03.2016, 12:04 5
Лучший ответ Сообщение было отмечено Melany как решение

Решение

Для начала надо было удалить все ненужные файлы образовавшиеся после компиляции, тогда бы размер проекта уменьшился в несколько раз.
Проект не собирался потому что не были добавлены соответствующие .cpp : ConstructMaterials.cpp, Goods.cpp, HomeAppliances.cpp и др.
Вобщем на. Может быть тебе потребуется переключить Project->Properties->Configuration Properties->General->Platform Toolset обратно на свой v110, а то у меня его не было.
Вложения
Тип файла: rar Sklad_v9.rar (16.3 Кб, 2 просмотров)
1
900 / 420 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
06.03.2016, 12:09 6
Лучший ответ Сообщение было отмечено Melany как решение

Решение

интернет тормазит
Вложения
Тип файла: rar Sklad_v9.rar (16.3 Кб, 4 просмотров)
1
21 / 4 / 2
Регистрация: 05.07.2015
Сообщений: 126
07.03.2016, 10:45  [ТС] 7
rao, спасибо Вам огромное))) Правда я не могу загрузить проект: "One or more projects in the solution were not loaded correctly. " Я попробую поперетаскивать их отдельно, чтоб увидеть что и куда нужно подключить. Когда я делала консольный проект то у меня было полно конфликтов связанных с перекрестным подключением, поэтому я с осторожностью отнеслась к этому в данном проекте, но как видно тут подход немножко другой, Еще раз спасибо ВАМ!!!

Добавлено через 22 часа 0 минут
rao, подскажите еще пожалуйста, после того, как возьму хендлы всех элементов управления окошка, на котором хочу отобразить результат ф-ции Show, которая находиться в Warehouse.срр:

Добавлено через 4 минуты
C++
1
2
3
4
5
int  i = 1;
    cout << "Department of Construct materials has:\n";
    for  (vector<ConstructMaterials>::iterator it = constructMaterials.begin() ; it != constructMaterials.end(); ++it)
        std::cout << i++ << ' ' << *it;
    std::cout << '\n';
вместо cout , мне нужно поставить SendMessage(....),
мне нужно в этой ф-ции видеть необходимые хендлы, или все это лучше сделать в Sklad.cpp. то есть там где создаются все диалоговые окна?
Спасибо
0
900 / 420 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
07.03.2016, 14:11 8
Не понял, удалось ли тебе скомпилировать проект из вложения?
Зачем тебе собирать хэндлы всех элементов я тоже не понял.

Разница между консольным приложением и оконным огромная, поэтому обычной заменой cout на SendMessage не обойтись. Предлагаю такую схему (см. проект во вложении):
При вызове второго диалога передать ему указатель на Warehouse w:
C++
1
DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG2), hDlg, Show, (LPARAM)&w);
А в диалоговой процедуре заполнять списки значениями:
C++
1
2
3
4
5
6
7
NT_PTR CALLBACK Show(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    ...
    case WM_INITDIALOG:
        pWarehouse = (Warehouse *)lParam;
        hListControl = GetDlgItem(hDlg, IDC_CONSTRUCT_LIST);
        // см. код в Sklad.cpp
    ...
Вместо кучи ListBox контролов лучше использовать один ListControl (см. в редакторе ресурсов)
Вложения
Тип файла: rar Sklad_ListControl.rar (20.3 Кб, 2 просмотров)
1
21 / 4 / 2
Регистрация: 05.07.2015
Сообщений: 126
08.03.2016, 01:18  [ТС] 9
rao, Спасибо Вам огромное за помощь))) я просто раньше никогда проекты такого рода в не писала, только в IOS, ну там все просто и понятно,

Добавлено через 28 секунд
Мне удалось открыть и первый Ваш проект и второй,

Добавлено через 52 минуты
Вы мне глаза открыли, я даже не знала что так можно, нам такое не показывали,,, нам просто показали, что можно брать хендлы всех элементов и дальше присваивать им значения,,, Так что Вы меня многому научили, спасибо еще раз Вам огромное)))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2016, 01:18

LNK2019 unresolved external symbol
По сути я просто хочу написать метод, в который можно передать функцию и её параметры, и затем...

unresolved external symbol
В одном hpp файле описано N кол-во классов (для примера достаточно двух): namespace heart {...

Ошибка: error LNK2019: unresolved external symbol
В общем делаю курсач, есть фунция ввода списка, но тут такая проблема: у меня не компилируется, то...

Ошибка error LNK2019: unresolved external symbol char *
Добрый день! Помогите разобраться с ошибкой, не пойму что именно она значит. Заранее спасибо ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru