Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
#1

Функция, возвращающая указатель - C++

12.12.2013, 22:59. Просмотров 519. Ответов 12
Метки нет (Все метки)

Здравствуйте.
Пускай есть класс Some_type и массив такого класса. Можно ли функцией Some_type* some_name (some_type) заполнять массив, если ею возвращается указатель на объект созданный с помощью new?

И мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Pizza db[count];
 
  for (int i {}; i < count; ++i)
  {
    *(db+1) = get_item();
  }
 
Pizza* get_item();
{
    Pizza* item = new Pizza;
    cout << "\nEnter name of product:\n";
    cin.getline(item->name, arr_size);
    cout <<  "\nEnter name of manufacturer:\n";
    cin.getline(item->mnfc, arr_size);
    cout <<  "\nEnter size of pizza:\n";
    cin >> item->dmtr;
    cin.get();
    cout <<  "\nEnter mass of product:\n";
    cin >> item->mass;
    cin.get();
 
    return item;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2013, 22:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функция, возвращающая указатель (C++):

Функция, возвращающая указатель
Добрый вечер. Требуется написать программу, содержащую структуру вида type1...

Функция, возвращающая указатель
Нужно написать функцию, входящие параметры которой являются указателем на...

Функция возвращающая указатель на int
Не могу понять ошибки. // prata 7 pt to function.cpp : Defines the entry point...

Функция, возвращающая указатель на структуру
Помогите пожалуйста понять в чем ошибка! Функция create должна возвращать...

Функция, возвращающая умный указатель
Здравствуйте, помогите пожалуйста создать функцию, возвращающую умный...

Функция, возвращающая указатель на функцию
Всем привет, Мне нужно создать функцию, которая будет возвращает указатель...

12
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:12 #2
Можно.
1
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
12.12.2013, 23:16  [ТС] #3
А почему тогда мне такую ошибку выдает?
error: no match for ‘operator=’ in ‘*(((Pizza*)(& db)) + 80u) = get_item()’|
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:32 #4
У вас же массив не указателей. Что вы в массив пытаетесь указатель поместить?
C++
1
*(db + i) = *get_item();
Только утечка памяти будет. Сначала сохраните указатель, потом поместите содержимое по указателю в массив, потом освободите память под указателем.
1
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
12.12.2013, 23:41  [ТС] #5
Спасибо!
Вы имелли ввиду примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Pizza* get_item()
{
    Pizza* item = new Pizza;
    cout << "\nEnter name of product:\n";
    cin.getline(item->name, arr_size);
    cout <<  "\nEnter name of manufacturer:\n";
    cin.getline(item->mnfc, arr_size);
    cout <<  "\nEnter size of pizza:\n";
    cin >> item->dmtr;
    cin.get();
    cout <<  "\nEnter mass of product:\n";
    cin >> item->mass;
    cin.get();
    Pizza item_copy;
    item_copy = *item;
    delete item;
    return &item_copy;
}
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:50 #6
Цитата Сообщение от andrejap Посмотреть сообщение
Вы имелли ввиду примерно так:
Нет, я имел ввиду так (get_item() из первого поста):
C++
1
2
3
4
5
6
for (int i = 0; i < count; ++i)
{
    Piza* p = get_item();
    *(db + i) = *p;
    delete p;
}
0
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:06  [ТС] #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Только утечка памяти будет.
Простите, а где же там будет утечка? Вот где может быть утечка в функции, кажется, понимаю. А вот в вызывающей ф-ии - не пойму.
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:11 #8
Цитата Сообщение от andrejap Посмотреть сообщение
Простите, а где же там будет утечка?
Там - это где?
Цитата Сообщение от alsav22 Посмотреть сообщение
Только утечка памяти будет.
Я разве указал место? Утечка памяти будет в коде из первого поста.
0
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:16  [ТС] #9
То есть, если не гнаться за рационализмом, то и мой исправленный вариант прокатывает (где есть return &item_copy)?
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:25 #10
Утечка памяти - это когда теряется возможность доступа к динамически выделенной памяти. А теперь скажите: в каком месте вашего кода (из первого поста) теряется такой доступ?

Добавлено через 7 минут
Цитата Сообщение от andrejap Посмотреть сообщение
То есть, если не гнаться за рационализмом, то и мой исправленный вариант прокатывает (где есть return &item_copy)?
Если очень сильно не гнаться...
Цитата Сообщение от andrejap Посмотреть сообщение
где есть return &item_copy
Лучше так не делать, компилятор пишет:
C++
1
warning C4172: возвращение адреса локальной или временной переменной
0
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:38  [ТС] #11
Получается, функция get_item выделяет память, значение в этих ячейках затем идет в цикл. Но при новых "циркуляциях" цикла, эти ячейки остаются заняты значениями, а доступ к ним теряется. Да?
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:46 #12
В общем и целом, да.
1
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:47  [ТС] #13
Мерси.
0
13.12.2013, 00:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 00:47
Привет! Вот еще темы с решениями:

Функция, возвращающая указатель на структуру
Ребят помогите пожалуйста,как создать функцию возвращающую указатель на...

Структура и функция, возвращающая указатель на структуру
Добрый вечер! В чем проявляется особенность функции, если мы даем ей тип от...

Функция, возвращающая указатель на двумерный массив
Добрый день! Столкнулся с конструкцией которую раньше не видел, и не до конца...

Рекурсивная функция, возвращающая указатель на объект
Есть рекурсивная функция (заполняющая двоичное дерево) Node* fill(int i){...


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

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

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