Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58

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

21.11.2014, 11:36. Показов 2663. Ответов 13
Метки нет (Все метки)

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

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
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
using namespace std;
 
struct Vector {
int x;
int y;
int sum;
};
 
int create (int x, int y)
    {
    Vector vek;
    Vector *ptr;
 
    vek.x = x;
    vek.y = x;
    ptr = &vek;
    return ptr;
}
 
int add ()
    {
 //...
}
 
int del ()
    {
    Vector vek;
    Vector *ptr;
    ptr = &vek;
    delete ptr;
}
 
int main() {
setlocale(LC_CTYPE,"Russian");
int k=1;
int x,y;
while (k!=0) {
    cout << "Введите операцию: create, delete, add, exit" << endl;
    char str[100];
    cin.getline(str, 100);
    
    if (!strcmp(str, "create"))
    {
        cout << "x=" << endl;
        cin >> x;
        cout << "y=" << endl;
        cin >> y;
        //... вызываем create (x,y);, которая должна возвращать указатель на структуру Vector
    }
 
    else if (!strcmp(str, "delete"))
        del();
    else if (!strcmp(str, "add"))
    {
        cout << "x=" << endl;
        //...
    }
 
    else if (!strcmp(str, "exit"))
    { 
        cout << "exit" << endl; k=0; 
    }
    else 
    { 
        cout << "ERROR!" << endl; k=0; 
    }
}
system("pause");
return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.11.2014, 11:36
Ответы с готовыми решениями:

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

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

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

13
 Аватар для Extrim88
51 / 51 / 21
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 11:41
Цитата Сообщение от nikkk Посмотреть сообщение
Функция create должна возвращать указатель на структуру Vector
Вы определили функцию create с типом возвращаемого значения int, а не Vector*

Цитата Сообщение от nikkk Посмотреть сообщение
int create (int x, int y)
* * {
* * Vector vek;
* * Vector *ptr;
vek.x = x;
* * vek.y = x;
* * ptr = &vek;
* * return ptr;
}
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
21.11.2014, 11:43
Ну это уж совсем глупости
Цитата Сообщение от nikkk Посмотреть сообщение
C++
1
int create (int x, int y)
C++
1
Vector* create(int x, int y)
Добавлено через 1 минуту
Цитата Сообщение от nikkk Посмотреть сообщение
C++
1
int del ()
а может
C++
1
void del()
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 11:46  [ТС]
Попробовал и void и vector*, компилятор продолжает ругаться
0
 Аватар для Extrim88
51 / 51 / 21
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 11:48
Цитата Сообщение от nikkk Посмотреть сообщение
Попробовал и void и vector*, компилятор продолжает ругаться
Что говорит?
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 11:49  [ТС]
1>c:\users\никита\documents\visual studio 2008\projects\lab6\lab6\1111.cpp(10) : error C2143: syntax error : missing ';' before '*'
1>c:\users\никита\documents\visual studio 2008\projects\lab6\lab6\1111.cpp(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\никита\documents\visual studio 2008\projects\lab6\lab6\1111.cpp(11) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int



1>c:\users\никита\documents\visual studio 2008\projects\lab6\lab6\1111.cpp(18) : error C2440: 'return' : cannot convert from 'Vector *' to 'int'
1> There is no context in which this conversion is possible
1>c:\users\никита\documents\visual studio 2008\projects\lab6\lab6\1111.cpp(19) : error C2617: 'create' : inconsistent return statement
1> c:\users\никита\documents\visual studio 2008\projects\lab6\lab6\1111.cpp(10) : see declaration of 'create'
0
 Аватар для Extrim88
51 / 51 / 21
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 11:51
Выложите полный исходник, а не половину программы в закомментированном виде.
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 11:53  [ТС]
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
using namespace std;
 
struct Vector {
int x;
int y;
int sum;
};
 
vector* create (int x, int y)
    {
    Vector vek;
    Vector *ptr;
 
    vek.x = x;
    vek.y = x;
    ptr = &vek;
    return ptr;
}
 
int add ()
    {
    Vector vek;
    Vector *ptr;
 
    vek.x = x;
    vek.y = x;
}
 
int del ()
    {
    Vector vek;
    Vector *ptr;
    ptr = &vek;
    delete ptr;
}
 
int main() {
setlocale(LC_CTYPE,"Russian");
int k=1;
int x,y;
while (k!=0) {
    cout << "Введите операцию: create, delete, add, exit" << endl;
    char str[100];
    cin.getline(str, 100);
    
    if (!strcmp(str, "create"))
    {
        cout << "x=" << endl;
        cin >> x;
        cout << "y=" << endl;
        cin >> y;
        create (x,y);
    }
 
    else if (!strcmp(str, "delete"))
        del();
    else if (!strcmp(str, "add"))
    {
        cout << "x=" << endl;
        cin >> x;
        cout << "y=" << endl;
        cin >> y;
        add(x,y);
    }
 
    else if (!strcmp(str, "exit"))
    { 
        cout << "exit" << endl; k=0; 
    }
    else 
    { 
        cout << "ERROR!" << endl; k=0; 
    }
}
system("pause");
return 0;
}
0
 Аватар для Extrim88
51 / 51 / 21
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 12:07
Что-то смысл вашей программы не ясен, да и по коду ошибок тьма. Непонятно, зачем вы вообще в функции create возвращаете указатель, но в вызывающей функции не используете его. Функции add() и create() идентичны, за исключением типа возврата, непонятно, зачем 2 раза проделывать одну и ту же работу. Функция del() отдельно порадовала, вы пытаетесь освободить память с помощью операции delete, предварительно не выделив область памяти с помощью операции new.
0
 Аватар для Zazy
47 / 47 / 23
Регистрация: 14.04.2013
Сообщений: 188
21.11.2014, 12:10
10 строчка Vector* именно с большой буквы, в коде много ошибок не удивительно что он не взлетеает.
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 12:38  [ТС]
Помогите пожалуйста решить задачу:

Написать программу, которая содержит функции для работы с координатами:
Функция create: принимает значения x, y и возвращает указатель на структуру Vector, которая содержит заданные значения координат.
Функция delete: указатель на структуру Vector, и удаляет ее из памяти.
Функция add: принимает два указателя на Vectorи возвращает новый Vector, содержащий сумму двух переданных векторов.

Основная программа (функция main) должна демонстрировать работу функций create, delete и add.
0
 Аватар для Zazy
47 / 47 / 23
Регистрация: 14.04.2013
Сообщений: 188
21.11.2014, 13:31
Лучший ответ Сообщение было отмечено nikkk как решение

Решение

маин сам додумай.
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
#include <iostream>
struct Vector
{
  int x;
  int y;
  Vector(int arg1, int arg2) : x(arg1), y(arg2) {}
};
 
Vector* create(int arg1, int arg2)
{
  Vector* ptr = new Vector(arg1,arg2);
  return ptr;
}
 
bool del(Vector* ptr)
{
  if(ptr != nullptr)
  {
    delete ptr;
    return true;
  }
  else
    return false;
}
 
Vector* add(const Vector* arg1, const Vector* arg2)
{
  Vector* sum = new Vector(arg1->x + arg2->x,arg1->y + arg2->y);
  return sum;
}
 
int main()
{
  Vector* a = create(2,2);
  Vector* b = create(3,3);
  Vector* c = add(a,b);
  cout << c->x << ' ' << c->y << endl;
  del(a);
  del(b);
  return 0;
}
1
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 14:42  [ТС]
Zazy, Спасибо огромное!!!)))
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,646
Записей в блоге: 6
21.11.2014, 14:45
nikkk, если интересно у вас в исходной программе возвращается указатель на локальную переменную. Так делать категорически запрещается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2014, 14:45
Помогаю со студенческими работами здесь

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

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

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

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

Функция, возвращающая умный указатель
Здравствуйте, помогите пожалуйста создать функцию, возвращающую умный указатель. Мой вариант не рабочий: class InterfaceVideo{ public:...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru