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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Desade
0 / 0 / 0
Регистрация: 28.06.2009
Сообщений: 5
#1

Как возвращать массив структур? - C++

28.06.2009, 11:37. Просмотров 565. Ответов 9
Метки нет (Все метки)

Понимаю тема уже поднималась, но я всёравно не могу понять...

Нужно возвратить массив из структур. Знаю что нужно делать через указатели...

вот код:
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
struct trgstr
{
char name[12];
int x;
int y;
int z;
};
 
trgstr* file_read()
{
struct trgstr* base=new trgstr[255];
 
//....
//заполняем
//...
 
return base;
}
 
void main()
{
struct trgstr base[255];
struct trgstr* base=file_read();   //в переменую base пихается белеберда...
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2009, 11:37     Как возвращать массив структур?
Посмотрите здесь:

Как объявить массив структур? - C++
Здраствуйте! Подскажите пожалуйста как объявляется массив структур и как потом записать элементы туда? Например такая структура: ...

Как организовать массив структур? - C++
Объясните кто-то как сделать чтобы введенные данные записывались в массив с помощью структуры. #include <iostream> #include <string>...

Как объявить массив структур? - C++
Как задать массив в С++? Type gostinica= record FIO:string; nomer:integer; cena: integer; kolvo: integer; itogo:integer; ...

Как очистить статический массив структур? - C++
structure A { char name; int weight; }; A B; В массив "В" я считал текстовый файл, теперь его нужно очистить что-бы считать...

C++ Как удалить динамический массив структур - C++
Как удалить массив структур, который был создан через new? Через deletedata, как заметил не чистится template <typename T1, typename...

Как записать массив структур в файл - C++
Ребят всем привет у меня такой вопрос как мне записать #include <iostream> #include <windows.h> #include <iomanip> #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.06.2009, 11:51     Как возвращать массив структур? #2
У меня все отлично работает. Вот пример:
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
#include <iostream>
#include <string.h>
 
using namespace std;
 
struct trgstr
{
char name[12];
int x;
int y;
int z;
};
 
struct trgstr* file_read()
{
struct trgstr* base=new trgstr[255];
 
strcpy(base[0].name, "name_one");
base[0].x = 666;
 
return base;
}
 
  int main()
  {
  struct trgstr* base=file_read();   //в переменую base пихается белеберда...
    cout<<base[0].name<<endl<<base[0].x<<endl;
    return 0;
  }
Вот вывод:
[Vourhey@Vourhey C]$ ./a.out
name_one
666
P. S. а зачем здесь два раза ты о base пишешь? (23, 24 строки)
C
1
2
struct trgstr base[255];
struct trgstr* base=file_read();   //в переменую base пихается белеберда..
типа, для тупых компиляторов два раза повторяешь? Здесь достаточно одного указателя.
Ultrator
11 / 7 / 1
Регистрация: 28.04.2009
Сообщений: 219
28.06.2009, 11:55     Как возвращать массив структур? #3
Зачем Вы сделали 23 строку ?? - base это переменная в которой будет адрес начала массива, ф-я file_read() его возвращает, всё правильно.

А в file_read() где-то перед return-ом нет ли случайно delete ?
Desade
0 / 0 / 0
Регистрация: 28.06.2009
Сообщений: 5
28.06.2009, 12:24  [ТС]     Как возвращать массив структур? #4
Да... Меня тоже смущает 23 строчка, но если её убрать, то когда идёт обращение к полю структуры компилятор выдаёт ошибку например я хочу вывести все поля структуры

C++
1
2
3
4
5
6
7
for (i=0; i<n; i++)
    {
    cout<<base[i].name<<endl;
    cout<<base[i].x<<endl;
    cout<<base[i].y<<endl;
    cout<<base[i].z<<endl;
    }
и вот что получается:

error C2065: base: необъявленный идентификатор
C2228: выражение слева от ".name" должно представлять класс, структуру или объединение

итд. для каждого поля
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.06.2009, 12:29     Как возвращать массив структур? #5
Desade, хочешь сказать, что мой код не работает?
error C2065: base: необъявленный идентификатор
с какого фига он не объявленный, если ты его объявил здесь:
C++
1
struct trgstr* base=file_read();
не может он быть необъявленным.

Добавлено через 2 минуты 58 секунд
да, пожалуйста. Вставлю твой код в свой:
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
#include <iostream>
#include <string.h>
 
using namespace std;
 
struct trgstr
{
char name[12];
int x;
int y;
int z;
};
 
struct trgstr* file_read()
{
struct trgstr* base=new trgstr[255];
 
strcpy(base[0].name, "name_one");
base[0].x = 666;
 
return base;
}
 
  int main()
  {
  struct trgstr* base=file_read();   //в переменую base пихается белеберда...
for (int i=0; i<2; i++)
        {
        cout<<base[i].name<<endl;
        cout<<base[i].x<<endl;
        cout<<base[i].y<<endl;
        cout<<base[i].z<<endl;
        }
    return 0;
  }
Вывод:
[Vourhey@Vourhey C]$ ./a.out
name_one
666
0
0

0
0
0
Никакой разницы.
Desade
0 / 0 / 0
Регистрация: 28.06.2009
Сообщений: 5
28.06.2009, 12:39  [ТС]     Как возвращать массив структур? #6
Работает... Но мой почему-то нет

Вот мой код целиком
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
trgstr* file_read();
 
void main()
 
{
int i,n=2,menu=1;     /*отладка*/
struct trgstr var;
//struct trgstr base[255];
 
cout<<".::MENU::."<<endl;
cout<<"1 - from file"<<endl;
cout<<"2 - from keyboard"<<endl;
cout<<"select: ";
//cin>>menu;
if (menu==1) 
    {
struct trgstr* base=file_read();
 
    }
 
 
 
 
for (i=0; i<n; i++)
    {
    cout<<base[i].name<<endl;
    cout<<base[i].x<<endl;
    cout<<base[i].y<<endl;
    cout<<base[i].z<<endl;
    }
 
 
}
 
 
trgstr* file_read()   //Чтение из файла
 
{
char line[12];
struct trgstr* base=new trgstr[255];
ifstream fn("base");
int i,n=2;
 
for (i=0; !fn.eof(); i++)
    {
    fn>>base[i].name;
    fn>>line;
    base[i].x=atoi(line);
    fn>>line;
    base[i].y=atoi(line);
    fn>>line;
    base[i].z=atoi(line);
    }
 
 
 
return base;
}
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.06.2009, 12:48     Как возвращать массив структур? #7
Не вижу описания struct trgstr.
Desade
0 / 0 / 0
Регистрация: 28.06.2009
Сообщений: 5
28.06.2009, 12:53  [ТС]     Как возвращать массив структур? #8
Сори...

C++
1
2
3
4
5
6
7
struct trgstr
{
char name[12];
int x;
int y;
int z;
};
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.06.2009, 12:58     Как возвращать массив структур? #9
Блин, ну ты крендель. Ты поместил объявление указателя в условие Зашибись.

Добавлено через 42 секунды
C++
1
2
3
4
5
if (menu==1) 
        {
struct trgstr* base=file_read();
 
        }
Вынеси struct trgstr* base за условие, чтобы base была видна компилятору по всей функции main.

Добавлено через 3 минуты 57 секунд
Вот тебе твой код без чтения из файла (так как, файл мне делать лень). Все прекрасно работает:
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
#include <iostream>
#include <stdlib.h>
#include <fstream>
 
using namespace std;
 
struct trgstr
{
char name[12];
int x;
int y;
int z;
};
 
 
struct trgstr* file_read();
 
int main()
{
int i,n=2,menu=1;     /*отладка*/
struct trgstr var;
struct trgstr* base;
 
cout<<".::MENU::."<<endl;
cout<<"1 - from file"<<endl;
cout<<"2 - from keyboard"<<endl;
cout<<"select: ";
//cin>>menu;
if (menu==1)
    {
        base=file_read();
    }
 
for (i=0; i<n; i++)
    {
    cout<<base[i].name<<endl;
    cout<<base[i].x<<endl;
    cout<<base[i].y<<endl;
    cout<<base[i].z<<endl;
    }
 
return 0;
}
 
trgstr* file_read()   //Чтение из файла
 
{
char line[12];
struct trgstr* base=new trgstr[255];
base[0].x = 666;
 
return base;
}
Вывод:
[Vourhey@Vourhey C]$ ./a.out
.::MENU::.
1 - from file
2 - from keyboard
select:
666
0
0

0
0
0
Может, тебе почитать какую-нибудь книжку еще разок? Ну или посидеть подольше над кодом, подумать самому? А то у тебя один и тот же вопрос никак решиться не может...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2009, 12:59     Как возвращать массив структур?
Еще ссылки по теме:

Подскажите как записать массив структур в файл - C++
Написал програмку, которая копирует желаемый прямоугольник(массив символов с атрибутами) в указанное место на экарн. Программа работает...

Как считать массив структур из файла txt - C++
#include &quot;stdafx.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; struct slug { char...

Как ввести данные в динамический массив структур? - C++
Подскажите пожалуйста, можно ли вводить данные в динамический массив структур c помощью cin &gt;&gt; следующим образом: #include &lt;iostream&gt; ...

Как вернуть массив структур (слабонервным не смотреть) - C++
В продолжении темы любви со структурами. Часть функций потырена с последней темы (чтоб лишний раз сюда не копипастить). Добрый...


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

Или воспользуйтесь поиском по форуму:
Desade
0 / 0 / 0
Регистрация: 28.06.2009
Сообщений: 5
28.06.2009, 12:59  [ТС]     Как возвращать массив структур? #10
Всё всё всё!!! Спасибооо!!!!
Yandex
Объявления
28.06.2009, 12:59     Как возвращать массив структур?
Ответ Создать тему
Опции темы

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