0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
1

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

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

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста понять в чем ошибка! Функция 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2014, 11:36
Ответы с готовыми решениями:

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

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

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

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

13
51 / 51 / 21
Регистрация: 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;
}
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
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()
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
21.11.2014, 11:46  [ТС] 4
Попробовал и void и vector*, компилятор продолжает ругаться
0
51 / 51 / 21
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 11:48 5
Цитата Сообщение от nikkk Посмотреть сообщение
Попробовал и void и vector*, компилятор продолжает ругаться
Что говорит?
0
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'
0
51 / 51 / 21
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 11:51 7
Выложите полный исходник, а не половину программы в закомментированном виде.
0
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;
}
0
51 / 51 / 21
Регистрация: 08.02.2013
Сообщений: 189
21.11.2014, 12:07 9
Что-то смысл вашей программы не ясен, да и по коду ошибок тьма. Непонятно, зачем вы вообще в функции create возвращаете указатель, но в вызывающей функции не используете его. Функции add() и create() идентичны, за исключением типа возврата, непонятно, зачем 2 раза проделывать одну и ту же работу. Функция del() отдельно порадовала, вы пытаетесь освободить память с помощью операции delete, предварительно не выделив область памяти с помощью операции new.
0
47 / 47 / 23
Регистрация: 14.04.2013
Сообщений: 188
21.11.2014, 12:10 10
10 строчка Vector* именно с большой буквы, в коде много ошибок не удивительно что он не взлетеает.
0
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.
0
47 / 47 / 23
Регистрация: 14.04.2013
Сообщений: 188
21.11.2014, 13:31 12
Лучший ответ Сообщение было отмечено 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  [ТС] 13
Zazy, Спасибо огромное!!!)))
0
Эксперт по математике/физикеЭксперт С++
2110 / 1380 / 399
Регистрация: 16.05.2013
Сообщений: 3,552
Записей в блоге: 6
21.11.2014, 14:45 14
nikkk, если интересно у вас в исходной программе возвращается указатель на локальную переменную. Так делать категорически запрещается.
0
21.11.2014, 14:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2014, 14:45
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru