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

Преобразование строки в строку? - C++

Восстановить пароль Регистрация
 
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,650
14.05.2013, 22:05     Преобразование строки в строку? #1
Есть вот такая вот ошибка
1>main.cpp(16): error C2664: Student::setName: невозможно преобразовать параметр 1 из "std::string **" в "std::string"
Ключевые строки кода:
C++
1
2
3
4
Student *arr = new Student[count];
string *value = new string;
cin >> *value;
arr[i].setName(&value);
И класс студента:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string>
using namespace std;
class Student{
    public:
        void setName(string value){
            _name=value;
        }
        void setLastName(string value){
            _lastName=value;
        }
        string name(){
            return _name;
        }
        string lastName(){
            return _lastName;
        }
    private:
        string _name;
        string _lastName;
};
Почему возникает ошибка и как ее исправить? Правильно ли использовать в данном случае динамические переменные, почему? Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.05.2013, 22:16     Преобразование строки в строку? #2
Цитата Сообщение от TanaTiX Посмотреть сообщение
Правильно ли использовать в данном случае динамические переменные
неправильно
Цитата Сообщение от TanaTiX Посмотреть сообщение
почему?
потому что внутри std::string уже использует динамическое выделение памяти для самой строки, создавать std::string динамически - только себе проблемы создавать ибо надо следить за его удалением

Добавлено через 54 секунды
Цитата Сообщение от TanaTiX Посмотреть сообщение
Почему возникает ошибка и как ее исправить?
C++
1
2
3
4
Student *arr = new Student[count];
string value;
cin >> value;
arr[i].setName(value);
Добавлено через 2 минуты
ну и сейчас у вас строка передается по значению т.е. копируется 2 раза
Цитата Сообщение от TanaTiX Посмотреть сообщение
C++
1
2
3
4
5
6
void setName(string value){
* * * * * * _name=value;
* * * * }
* * * * void setLastName(string value){
* * * * * * _lastName=value;
* * * * }
дабы из,ежать лишнего копирования лучше передавать по ссылке на константу
C++
1
2
3
4
5
6
void setName(const string& value){
 _name=value;
}
void setLastName(const string& value){
 _lastName=value;
}
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,650
14.05.2013, 22:17  [ТС]     Преобразование строки в строку? #3
Jupiter, я исходил из желания максимально очищать память по окончании работы программы. Переменная value в ней необходима только на определенном этапе и далее бесполезна. Вопрос чисто академический, данный код - лишь пример. Как тогда удалить переменную из памяти?

Upd. кажется пока писал, сообщение обновилось, пойду курить мануалы, еще раз спасибо.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.05.2013, 22:29     Преобразование строки в строку? #4
TanaTiX, если требуется осободить память которую занимает строка то
C++
1
std::string().swap(value);
после этого значение value будет уничтожено и value будет empty строкой.
Либо можно создать value в локальной области видимости:
C++
1
2
3
4
5
6
{
    {
         std::string value;
    } //value уничтожается и вне блока уже недоступна
 
}
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,650
14.05.2013, 22:33  [ТС]     Преобразование строки в строку? #5
Jupiter, т.е. переменная созданная внутри метода удаляется по окончании работы метода? Или при условии отсутствия ссылок на переменную в других частях программы (сравниваю со флешом)? И тогда получается, что создание динамических переменных актуально как поле класса, а не как локальная/статическая переменная?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.05.2013, 22:40     Преобразование строки в строку? #6
Цитата Сообщение от TanaTiX Посмотреть сообщение
т.е. переменная созданная внутри метода удаляется по окончании работы метода?
если переменная создана на стеке т.е. вот так:
C++
1
2
3
{
    std::string str;
}
то да, удаляется по выходу из блока фигурных скобок
Yandex
Объявления
14.05.2013, 22:40     Преобразование строки в строку?
Ответ Создать тему
Опции темы

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