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

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

Восстановить пароль Регистрация
 
nikkk
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 11:36     Функция, возвращающая указатель на структуру #1
Помогите пожалуйста понять в чем ошибка! Функция 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;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2014, 11:36     Функция, возвращающая указатель на структуру
Посмотрите здесь:

Функция, возвращающая указатель на функцию C++
Функция возвращающая указатель на int C++
C++ Функция, возвращающая указатель на структуру
C++ Функция, возвращающая указатель
C++ Функция, возвращающая указатель
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Extrim88
 Аватар для Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 11:41     Функция, возвращающая указатель на структуру #2
Цитата Сообщение от 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;
}
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 575
Регистрация: 14.05.2014
Сообщений: 4,737
Записей в блоге: 1
Завершенные тесты: 5
21.11.2014, 11:43     Функция, возвращающая указатель на структуру #3
Ну это уж совсем глупости
Цитата Сообщение от 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()
nikkk
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 11:46  [ТС]     Функция, возвращающая указатель на структуру #4
Попробовал и void и vector*, компилятор продолжает ругаться
Extrim88
 Аватар для Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 11:48     Функция, возвращающая указатель на структуру #5
Цитата Сообщение от nikkk Посмотреть сообщение
Попробовал и void и vector*, компилятор продолжает ругаться
Что говорит?
nikkk
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 11:49  [ТС]     Функция, возвращающая указатель на структуру #6
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'
Extrim88
 Аватар для Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 11:51     Функция, возвращающая указатель на структуру #7
Выложите полный исходник, а не половину программы в закомментированном виде.
nikkk
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 11:53  [ТС]     Функция, возвращающая указатель на структуру #8
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;
}
Extrim88
 Аватар для Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 12:07     Функция, возвращающая указатель на структуру #9
Что-то смысл вашей программы не ясен, да и по коду ошибок тьма. Непонятно, зачем вы вообще в функции create возвращаете указатель, но в вызывающей функции не используете его. Функции add() и create() идентичны, за исключением типа возврата, непонятно, зачем 2 раза проделывать одну и ту же работу. Функция del() отдельно порадовала, вы пытаетесь освободить память с помощью операции delete, предварительно не выделив область памяти с помощью операции new.
Zazy
 Аватар для Zazy
37 / 37 / 11
Регистрация: 14.04.2013
Сообщений: 167
21.11.2014, 12:10     Функция, возвращающая указатель на структуру #10
10 строчка Vector* именно с большой буквы, в коде много ошибок не удивительно что он не взлетеает.
nikkk
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 12:38  [ТС]     Функция, возвращающая указатель на структуру #11
Помогите пожалуйста решить задачу:

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

Основная программа (функция main) должна демонстрировать работу функций create, delete и add.
Zazy
 Аватар для Zazy
37 / 37 / 11
Регистрация: 14.04.2013
Сообщений: 167
21.11.2014, 13:31     Функция, возвращающая указатель на структуру #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
маин сам додумай.
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;
}
nikkk
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 14:42  [ТС]     Функция, возвращающая указатель на структуру #13
Zazy, Спасибо огромное!!!)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2014, 14:45     Функция, возвращающая указатель на структуру
Еще ссылки по теме:

Структура и функция, возвращающая указатель на структуру C++
C++ Функция, возвращающая умный указатель
C++ Рекурсивная функция, возвращающая указатель на объект

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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
21.11.2014, 14:45     Функция, возвращающая указатель на структуру #14
nikkk, если интересно у вас в исходной программе возвращается указатель на локальную переменную. Так делать категорически запрещается.
Yandex
Объявления
21.11.2014, 14:45     Функция, возвращающая указатель на структуру
Ответ Создать тему
Опции темы

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