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

Map stl c++ ссылка на неразрешенный внешний символ - C++

Восстановить пароль Регистрация
 
Dima_Bro
1 / 1 / 0
Регистрация: 09.04.2014
Сообщений: 16
26.04.2014, 23:25     Map stl c++ ссылка на неразрешенный внешний символ #1
Уважаемые форумчане, столкнулся с проблемой вставки объекта класса как параметр в контейнер map. Привожу ниже код как пытался сделать. Компилятор использую visual studio 2012. При построении проекта выдает следующие ошибки :

1>Исходный код.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: virtual __thiscall Staff::~Staff(void)" (??1Staff@@UAE@XZ) в функции "public: __thiscall std:: pair < unsigned int const ,class Staff>::~pair<unsigned int const ,class Staff>(void)" (??1?$pair@$$CBIVStaff@@@std@@QAE@XZ)
1>C:\Users\dima\Documents\Visual Studio 2012\Projects\ConsoleApplication2\Debug\ConsoleApplication2.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

Ещё возник вопрос, как можно проинициализировать контейнер в конструкторе класса, а также уничтожить в деструктуре.

Помогите пожалуйста с решением проблемы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# include <iostream>
# include <string>
# include <map>
using namespace std;
 
 
class Staff{
private: 
    string Name; 
    string LastName; 
    string Job; 
    double Salary;
public: 
    Staff(){
        Name="\0";
        LastName="\0";
        Job="\0";
    }
    ~Staff();
    Staff(const Staff &obj){
        Name=obj.Name; 
        LastName=obj.LastName;
        Job=obj.Job;
        Salary=obj.Salary;
    }
    friend istream &operator >>(istream &, Staff &);
    friend ostream &operator <<(ostream &, const Staff &);
    Staff *Clone()const{return new Staff(*this);}
};
 
class Company{
private: 
    map<unsigned int, Staff> staff;
public: 
    Company();
    ~Company();
    void Add();
};
 
istream &operator >>(istream &is, Staff &t){
    getline(is, t.Name);
    getline(is, t.LastName);
    getline(is, t.Job);
    is>>t.Salary;
    return is;
}
 
ostream &operator <<(ostream &os, const Staff &t){
    os << t.Name << t.LastName << t.Job << t.Salary ;
    return os;
}
 
int main(){
    map<unsigned int, Staff> my_map;
    Staff obj;
    cin>>obj;
    my_map.insert(pair<unsigned int, Staff>(1, obj));
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14219 / 6234 / 988
Регистрация: 02.05.2013
Сообщений: 10,391
Завершенные тесты: 1
26.04.2014, 23:32     Map stl c++ ссылка на неразрешенный внешний символ #2
Пишут же прямым текстом, да еще на русском:

Цитата Сообщение от Dima_Bro Посмотреть сообщение
ссылка на неразрешенный внешний символ "public: virtual __thiscall Staff::~Staff(void)"
Деструктор Staff не реализован. Контейнер не может работать с пользовательскими
типами, у которых нет деструктора. Деструктор должен быть, хоть какой-то.
Dima_Bro
1 / 1 / 0
Регистрация: 09.04.2014
Сообщений: 16
26.04.2014, 23:54  [ТС]     Map stl c++ ссылка на неразрешенный внешний символ #3
Убежденный, спасибо, действительно что-то тупанул я

Добавлено через 13 минут
А можно ли проинициализировать контейнер в конструкторе? Или по-идее у контейнера при создание есть свой описанный конструктор => в моём классе Сompany инициализировать его не имеет смысла?
Убежденный
Системный программист
 Аватар для Убежденный
14219 / 6234 / 988
Регистрация: 02.05.2013
Сообщений: 10,391
Завершенные тесты: 1
27.04.2014, 22:43     Map stl c++ ссылка на неразрешенный внешний символ #4
Цитата Сообщение от Dima_Bro Посмотреть сообщение
А можно ли проинициализировать контейнер в конструкторе? Или по-идее у контейнера при создание есть свой описанный конструктор => в моём классе Сompany инициализировать его не имеет смысла?
Это не требуется.
У контейнера, как и у любого нормально спроектированного класса,
есть свой конструктор, деструктор, копи-конструктор и оператор
присваивания. Вам нужно лишь объявить его в классе, все остальное
контейнер "возьмет на себя".
Yandex
Объявления
27.04.2014, 22:43     Map stl c++ ссылка на неразрешенный внешний символ
Ответ Создать тему
Опции темы

Текущее время: 08:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru