Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 28.06.2009
Сообщений: 5
1

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

28.06.2009, 11:37. Показов 866. Ответов 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 пихается белеберда...
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2009, 11:37
Ответы с готовыми решениями:

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю?
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям...

Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив?
Допустим есть структура struct Base { int a; int b; int c; }; В...

Структуры.Обработка массивов структур.Создать массив структур из 10-ти элементов
Создать массив структур из 10-ти элементов: <Номер договора><Фамилия клиента><стоимость...

Блочная сортировка структур (Отсортировать массив структур по фамилии)
Подскажите алгоритм блочной сортировки структур на языке С++. Мне нужно отсортировать массив...

9
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
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 пихается белеберда..
типа, для тупых компиляторов два раза повторяешь? Здесь достаточно одного указателя.
0
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
28.06.2009, 11:55 3
Зачем Вы сделали 23 строку ?? - base это переменная в которой будет адрес начала массива, ф-я file_read() его возвращает, всё правильно.

А в file_read() где-то перед return-ом нет ли случайно delete ?
0
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" должно представлять класс, структуру или объединение

итд. для каждого поля
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
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
Никакой разницы.
0
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;
}
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
28.06.2009, 12:48 7
Не вижу описания struct trgstr.
0
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;
};
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
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
Может, тебе почитать какую-нибудь книжку еще разок? Ну или посидеть подольше над кодом, подумать самому? А то у тебя один и тот же вопрос никак решиться не может...
0
0 / 0 / 0
Регистрация: 28.06.2009
Сообщений: 5
28.06.2009, 12:59  [ТС] 10
Всё всё всё!!! Спасибооо!!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2009, 12:59

Динамический массив структур в другом массиве структур
Можно ли реализовать динамический (или статический) массив структур в другом массиве структур?...

Массив структур, сохранение начала каждой из структур
Я создал такую структуру class Lancuch { public: char cos; Lancuch * nastepny; }; Lancuch...

Как организовать массив структур?
Объясните кто-то как сделать чтобы введенные данные записывались в массив с помощью структуры. ...

Как создать массив структур?
help


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

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

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