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

Заполнение map объектами класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ shared_ptr валится http://www.cyberforum.ru/cpp-beginners/thread1100053.html
#include <iostream> #include <string> using namespace std; #include "boost/shared_ptr.hpp" class One { public: One()
C++ Решение СЛАУ методом квадратного корня Здравствуйте!Помогите мне,пожалуйста. Суть задания написана в теме.Есть блок-схема для данного кода,но он для pasсal,поэтому добавляю к размеру массивов/матриц еденицу. Массив d-диагональная матрица.Массив a-исходный массив.Массив b-массив свободных членов.Массив y-просто массив нужный для подсчётов.Проблема в том,что как написать код я не знаю,ибо нужно высчитывать закономерности,чтобы самому... http://www.cyberforum.ru/cpp-beginners/thread1100051.html
C++ Невозможно преобразовать char* в char
Как исправить ошибку?
Завершение программы по вводу текста при выборе "нет" C++
Имеется код, который выводит максимальное число. #include <iostream> #include <clocale> using namespace std; int main() { setlocale(LC_ALL, "Russian");
C++ Как передать входящие параметры main в подфункцию? http://www.cyberforum.ru/cpp-beginners/thread1100018.html
как в таком случае передать правильно параметры в вызывающей main в вызываемую функцию Multiplication() // ConsoleApplication11.cpp: главный файл проекта. #include "stdafx.h" #include <iostream> #include <conio.h> using namespace System; using namespace std;
C++ Интерпретатор текстовой (теговой) разметки документа Здравствуйте, товарищи! На просторах интернета нашел интересное задание, которое захотел сделать, чтобы научиться чему-то в программировании, но сразу же возник вопрос: как? Какую теорию нужно знать? Какую литературу прочесть или еще что? Я просто вообще не пойму как распознавать теги и их закрытие, а если вложенность? Как искать теги? Накидайте как можно более полезных ссылок, литературы,... подробнее

Показать сообщение отдельно
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
19.02.2014, 16:18
Цитата Сообщение от RocBoy-D Посмотреть сообщение
Конструктор объектов класса работает верно, так как map правильно заполняется методом insert. В чем может быть ошибка?
Итак, ошибка в неправильной реализации конструктора копирования и оператора присваивания.
Правильная реализация должна быть вроде этой:
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
Queue :: Queue (const Queue &obj)
    : first_name(NULL), second_name(NULL)
{
    if(obj.first_name)
    {
        first_name = new char [strlen (obj.first_name) + 1];
        strcpy(first_name, obj.first_name);
    }
    if(obj.second_name)
    {
        second_name = new char [strlen (obj.second_name) + 1];
        strcpy (second_name, obj.second_name);
    }
}
 
Queue &Queue :: operator = (const Queue &obj)
{
    if (this == &obj)
        return *this;
 
    delete [] first_name;
    first_name = NULL;
    if(obj.first_name)
    {
        first_name = new char [strlen (obj.first_name) + 1];
        strcpy (first_name, obj.first_name);
    }
    delete [] second_name;
    second_name = NULL;
    if(obj.second_name)
    {
        second_name = new char [strlen (obj.second_name) + 1];
        strcpy (second_name, obj.second_name);
    }
    return *this;
}
Иначе при попытке скопировать пустой(со значениями NULL) объект приведет к краху.
Что собственно и происходит. Из-за особенности работы operator[] у std::map.
Т.к. сначала он создает пустой объект в map с заданным ключом, а потом уже через оператор присваивания переносит содержимое твоего obj!
Если исправить код, как я показал выше, то падения не будет. Но код все равно будет не очень хорошим из-за лишних действий. Поэтому добавлять в map лучше (и эффективнее) так:
C++
1
2
    std::map <unsigned short, Queue> m;
m.insert(std::make_pair(9, Queue("Sokolov", "Nikita")));
Помимо этого есть ошибки в operator<<, operator>> и operator<, связанные с нулевым состояние твоего Queue, но исправить их предлагаю самостоятельно
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru