Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
184 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359

Передать структуру в функцию!!

05.10.2011, 12:13. Показов 6564. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги, есть вопрос технический. К примеру мне нужно передать массив в функцию. Что я делаю? А вот что:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
...
short Array[4];
Str(Array);
...
}
Далее определяю функцию в файле cpp
C++
1
2
3
4
public:
...     
void Str(short Array[]);
...
и получаю результат в переданной функции:
C++
1
2
3
4
void TForm1::Str(short Array[])
{
...
}
Это касается функций числовых, или текстовых. А как мне передать структурный массив?
Например:
C++
1
2
struct  res{float x,y;}
short Array[4];
Или, хотя-бы просто структуру?
За ранее спасибо за помощь и понимание.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.10.2011, 12:13
Ответы с готовыми решениями:

Передать структуру в функцию
что не так в моей передаче структуры и массива в функцию? void Sort_date (struct ptoject& proj, int &mas, int num) -функция ...

Как передать структуру в функцию
Добрый день. Возник такой вопрос, никак не могу разобраться. Запускаю поток, он должен отработать некую функцию funk которая находится в...

Не получается передать структуру в функцию
#include <iostream> using namespace std; struct Node { int e; int c; Node *next; };

13
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
05.10.2011, 12:23
res Array[4]; массив типа res структуры
А вообще обычно передают указатель на массив
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
05.10.2011, 12:28
C++
1
2
3
4
5
6
7
8
void TForm1::Str(res Array[])
{
...
}
 
struct  res{float x,y;}
res Array[4];
Str(Array);
0
184 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
05.10.2011, 12:57  [ТС]
Здорово. а в файле cpp что писать нужно?
при передаче массива т.е.
C++
1
2
3
struct  res{float x,y;}
res Array[4];
Str(Array);
ругается:
[C++ Error] Unit1.cpp(54): E2451 Undefined symbol 'Array'
в сpp файле пишу:
C++
1
void Str(Array);
или
C++
1
void Str(Array[]);
- видимо не правильно определяю массив
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
05.10.2011, 13:06
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct res
{
 float x;
 float y;
};
 
void summa (res *Array)
{
 Array[1].x=Array[1].x+Array[0].x;
 return;
}
 
int main()
{
 res Array[4]={1,2,3,4,5,6,7,8};
 summa(&Array[0]);
 return 0;
}
0
184 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
05.10.2011, 13:06  [ТС]
по логике вещей я должен определять ф-ю как-то так:
C++
1
void Str(struct Array[]);
но все равно пишет ошибки однако.
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
05.10.2011, 13:14
Цитата Сообщение от Андрей2011 Посмотреть сообщение
по логике вещей
Это не по логике. Вы создали новый тип данных res. Вот и передавайте массив такого типа
0
184 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
05.10.2011, 13:22  [ТС]
Как его передавать?

C++
1
2
3
struct  res{float x,y;}
Array[4];
Str(res Array);
или
C++
1
2
3
struct  res{float x,y;}
Array[4];
Str(res*Array);
не получается ((((
а по поводу указателя это все прекрасно, но мне непременно нужно массив структурный. Если это вообще возможно конечно.
0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
05.10.2011, 13:27
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
struct res
{
    float x;
    float y;
};
//---------------------------------------------------------------------------
void Str(res StructArray[], int count)
{
 
    for(int i = 0; i < count; i++)
    {
        StructArray[i].x = 9;
        StructArray[i].y = 2;
    }
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    res Array[6];
    Str(Array, 6);
 
    for(int i = 0; i < 6; i++) // смотри результат
    {
        ShowMessage(String(Array[i].x) + " " + String(Array[i].y));
    }
}
//---------------------------------------------------------------------------
1
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
05.10.2011, 13:30
Цитата Сообщение от Андрей2011 Посмотреть сообщение
не получается ((((
не получается, потому что не Str(res Array), а Str(Array);
При передаче параметра не указывается его тип. Тип указывается в описании самой функции

Цитата Сообщение от Андрей2011 Посмотреть сообщение
а по поводу указателя это все прекрасно, но мне непременно нужно массив структурный.
Я выше привёл код с указателем и структурным массивом. Почему бы его не попробовать?
0
184 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
05.10.2011, 13:56  [ТС]
Уф. Уважаемый, Gremlin, так как же мне определить функцию в файле cpp?
Уважаемый, mimicria, как передать массив в функцию теперь понятно, но как ее определить?
в файле cpp где "public" определяются пресловутые функции, и нужно правильно не только передать массив в функцию, но и определить ее в ней.
Вот вариант Gremlin-а мне нравится. Я передаю ф-ю:
Str(Array, 6);
но в cpp как мне ее определить?
C++
1
2
3
void Str(res Array, int count); //так?
//или
void Str(struct Array, int count); //так?
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
05.10.2011, 14:03
Цитата Сообщение от Андрей2011 Посмотреть сообщение
Уважаемый, mimicria, как передать массив в функцию теперь понятно, но как ее определить?
Вы хоть смотрите что вам в исходниках показывают? Продублирую
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct res
{
 float x;
 float y;
};
 
void summa (res *Array)
{
 Array[1].x=Array[1].x+Array[0].x;
 return;
}
 
int main()
{
 res Array[4]={1,2,3,4,5,6,7,8};
 summa(&Array[0]);
 return 0;
}
1
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
05.10.2011, 14:08
Андрей2011, я так понимаю Вы хотите сделать ее частью класса Form1


*.h
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
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
struct res
{
    float x;
    float y;
};
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
    void Str(res StructArray[], int count);
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
 
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
*.cpp
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void TForm1::Str(res StructArray[], int count)
{
    for(int i = 0; i < count; i++)
    {
        StructArray[i].x = 9;
        StructArray[i].y = 2;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    res Array[6];
    Str(Array, 6);
 
    for(int i = 0; i < 6; i++)
    {
        ShowMessage(String(Array[i].x) + " " + String(Array[i].y));
    }
}
//---------------------------------------------------------------------------
1
184 / 24 / 4
Регистрация: 18.01.2011
Сообщений: 359
05.10.2011, 14:24  [ТС]
Ну конечно. Я все напутал. Не сpp файл а h. Извиняюсь. Gremlin меня понял правильно!! Спасибо!! все получилось!! )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.10.2011, 14:24
Помогаю со студенческими работами здесь

Как передать структуру в функцию?
Всем привет! Решил для начала сам потренироваться с простыми программами, которые приходят в голову, но возникли некоторые трудности. ...

Не получается передать структуру в функцию
Имею такую проблему, при попытке передать мою структуру в функцию, получаю следующие ошибки: &quot;Settings::Settings(const Settings...

Передать структуру в функцию другого класса
Добрый день, при выполнении КР возник затор, необходима подсказка. Нужно создать объект класса и инициализировать его конструктором со...

Как передать в функцию ссылку на структуру?
Добрый вечер, помогите пожалуйста разобраться. Нужно чтобы функция myProc принимала не структуру, а ссылку на структуру.struct vs { long...

Передать в функцию COM структуру или класс
Добрый день. Пишу реализацию Com объекта на C# для вызова из C++ Функции вызываются с этим проблем нет. Но я не могу разобраться как...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru