С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 17.02.2013
Сообщений: 142
1

Передача структуры в функцию

21.09.2013, 23:52. Показов 1128. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, объясните пожалуйста, как передать структуру в функцию. Пользовался поиском, но ничего не понял


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct syt
{
    int group;
    int price;
    float pn;
    float vt;
    float sr;
    float ch;
    float pt;
    float itogo;
};
 
 
void sum(syt *array[], int n){
    for (int i=0; i<=n; i++)
       array[i]->itogo=array[i]->pn+array[i]->vt+array[i]->sr+array[i]->ch+array[i]->pt;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
syt coal[100];
 
void MainWindow::read(){
    int row = table->rowCount();
    for(int i=0; i<row;i++){
        coal[i].group=table->item(i,0)->text().toFloat();
        coal[i].price=table->item(i,1)->text().toFloat();
        coal[i].pn=table->item(i,2)->text().toFloat();
        coal[i].vt=table->item(i,3)->text().toFloat();
        coal[i].sr=table->item(i,4)->text().toFloat();
        coal[i].ch=table->item(i,5)->text().toFloat();
        coal[i].pt=table->item(i,6)->text().toFloat();
    }
    sum(coal,row);
}
Ошибка:
Код
D:\GoogleDrive\University\Programs\OOP\Struct_GUI\mainwindow.cpp:57: ошибка: cannot convert 'syt*' to 'syt**' for argument '1' to 'void sum(syt**, int)'
Заранее спасибо !
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2013, 23:52
Ответы с готовыми решениями:

Передача структуры в функцию
#include &lt;stdio.h&gt; struct Student { char Name; /* Фамилия студента */ int ...

Передача структуры в функцию
Хочу передать массив в функцию. как лучше это сделать? struct a1{ char smA1; }; char b1 =...

Передача структуры в функцию
объясните, пожалуйста, что это за передача структуры в некоторые функции программы: void...

Передача структуры в функцию
Добрый день! Я создал структуру и мне надо передать ее в функцию. При вводе данных нужно обращаться...

9
261 / 236 / 161
Регистрация: 10.12.2011
Сообщений: 513
22.09.2013, 00:13 2
Попробуй так:

C++
1
2
3
4
void sum(syt array[], int n){
    for (int i=0; i<=n; i++)
       array[i].itogo = array[i].pn+array[i].vt+array[i].sr+array[i].ch+array[i].pt;
}
0
2 / 2 / 0
Регистрация: 17.02.2013
Сообщений: 142
22.09.2013, 00:31  [ТС] 3
Теперь такое:
Миниатюры
Передача структуры в функцию  
0
261 / 236 / 161
Регистрация: 10.12.2011
Сообщений: 513
22.09.2013, 00:36 4
Полный код программы скинь.
0
2 / 2 / 0
Регистрация: 17.02.2013
Сообщений: 142
22.09.2013, 00:39  [ТС] 5
mainwindow.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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QtGui>
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    QGridLayout *glMain;
    QWidget *wCenter;
    QTableWidget *table;
    QLineEdit *txt;
    QPushButton *add,*readd;
    MainWindow(QWidget *parent = 0);
public slots:
    void add_row();
    void read();
    void calc(QVector <int> data);
};
 
#endif // MAINWINDOW_H

mainwindow.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
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
#include "mainwindow.h"
#include "struct.cpp"
syt coal[100];
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent){
    QTextCodec:: setCodecForLocale(QTextCodec::codecForName("Windows-1251"));
    QTextCodec:: setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
    this->setWindowTitle("ООП основы работы со структурами");
    setMinimumSize(750,400);
    glMain = new QGridLayout;
    table = new QTableWidget(0,8);
    table->setHorizontalHeaderLabels(QStringList() << "Бригада"<<"Цена за тонну"<<"ПН"<<"ВТ"<<"СР"<<"ЧТ"<<"ПТ"<<"Итого");
    txt = new QLineEdit("1 198 50 40.5 6.2 48 33.5");
    add = new QPushButton("Добавить");
    readd = new QPushButton("Считать");
    glMain->setRowStretch(0,5);
    glMain->setRowStretch(1,1);
    glMain->addWidget(txt,1,0);
    glMain->addWidget(table,0,0,1,3);
    glMain->addWidget(add,1,1);
    glMain->addWidget(readd,1,2);
    wCenter = new QWidget;
    wCenter->setLayout(glMain);
    this->setCentralWidget(wCenter);
    connect(add,SIGNAL(clicked()),this,SLOT(add_row()));
    connect(readd,SIGNAL(clicked()),this,SLOT(read()));
}
 
void MainWindow::add_row(){
    QString all = txt->text();
    QStringList list = all.split(" ");
    int row=table->rowCount();
 
    if(list.count()==7){
        table->setRowCount(row+1);
        table->setItem(row,0,new QTableWidgetItem(list[0]));
        table->setItem(row,1,new QTableWidgetItem(list[1]));
        table->setItem(row,2,new QTableWidgetItem(list[2]));
        table->setItem(row,3,new QTableWidgetItem(list[3]));
        table->setItem(row,4,new QTableWidgetItem(list[4]));
        table->setItem(row,5,new QTableWidgetItem(list[5]));
        table->setItem(row,6,new QTableWidgetItem(list[6]));
    }else qDebug()<<"Кол-во элементов добавляемых в строку должно быть равно 7";
}
 
void MainWindow::read(){
    int row = table->rowCount();
    for(int i=0; i<row;i++){
        coal[i].group=table->item(i,0)->text().toFloat();
        coal[i].price=table->item(i,1)->text().toFloat();
        coal[i].pn=table->item(i,2)->text().toFloat();
        coal[i].vt=table->item(i,3)->text().toFloat();
        coal[i].sr=table->item(i,4)->text().toFloat();
        coal[i].ch=table->item(i,5)->text().toFloat();
        coal[i].pt=table->item(i,6)->text().toFloat();
    }
    sum(coal,row);
}
void MainWindow::calc(QVector <int> data){
    int row = table->rowCount();
    for(int i=0; i<row;i++){
        table->setItem(i,7,new QTableWidgetItem(data[i]));
    }
}

struct.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct syt
{
    int group;
    int price;
    float pn;
    float vt;
    float sr;
    float ch;
    float pt;
    float itogo;
};
 
 
void sum(syt array[], int n){
    for (int i=0; i<=n; i++)
       array[i].itogo = array[i].pn+array[i].vt+array[i].sr+array[i].ch+array[i].pt;
}
0
261 / 236 / 161
Регистрация: 10.12.2011
Сообщений: 513
22.09.2013, 01:09 6
Попробуй определить структуру в функции так :
C++ (Qt)
1
void sum(syt coal, int n)
или
C++ (Qt)
1
void sum(syt &coal, int n)
Поэксперементируй )
Если на точки будет ругаться, ставь указатели ( стрелочки ).
Кстати, коль это был не С++ а С++(Qt) обрамляй в соответствующие теги )
А то я тут понимаешь разогнался, а очевидной вещи не заметил
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 01:31 7
wollk, у вас двойное определение функции. Вот так нельзя делать:
C++
1
#include "struct.cpp"
0
2 / 2 / 0
Регистрация: 17.02.2013
Сообщений: 142
22.09.2013, 11:57  [ТС] 8
Цитата Сообщение от alsav22 Посмотреть сообщение
wollk, у вас двойное определение функции. Вот так нельзя делать:
C++
1
#include "struct.cpp"

если я уберу, то будут ошибки типа таких:
Код
D:\GoogleDrive\University\Programs\OOP\Struct_GUI\mainwindow.cpp:2: ошибка: 'syt' does not name a type
D:\GoogleDrive\University\Programs\OOP\Struct_GUI\mainwindow.cpp:48: ошибка: 'coal' was not declared in this scope
Добавлено через 3 минуты
Цитата Сообщение от Leshak Посмотреть сообщение
Попробуй определить структуру в функции так :
C++ (Qt)
1
void sum(syt coal, int n)
или
C++ (Qt)
1
void sum(syt &coal, int n)
Поэксперементируй )
Если на точки будет ругаться, ставь указатели ( стрелочки ).
Я же в функцию передаю массив. В любом случае ни так, ни так не работает (
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 13:06 9
Цитата Сообщение от wollk Посмотреть сообщение
если я уберу, то будут ошибки типа таких:
Делайте правильно: прототипы в .h (их подключать), реализации в .cpp (их НЕ подключать).

Добавлено через 21 минуту
struct.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct syt
{
    int group;
    int price;
    float pn;
    float vt;
    float sr;
    float ch;
    float pt;
    float itogo;
};
 
void sum(syt array[], int n);

struct.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
#include "struct.h"
 
void sum(syt array[], int n)
{
    for (int i=0; i<=n; i++)
       array[i].itogo = array[i].pn+array[i].vt+array[i].sr+array[i].ch+array[i].pt;
}

mainwindow.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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QtGui>
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    QGridLayout *glMain;
    QWidget *wCenter;
    QTableWidget *table;
    QLineEdit *txt;
    QPushButton *add,*readd;
    MainWindow(QWidget *parent = 0);
public slots:
    void add_row();
    void read();
    void calc(QVector <int> data);
};
 
#endif // MAINWINDOW_H

mainwindow.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
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
#include "mainwindow.h"
#include "struct.h"
 
syt coal[100];
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent){
    QTextCodec:: setCodecForLocale(QTextCodec::codecForName("Windows-1251"));
    QTextCodec:: setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
    this->setWindowTitle("ООП основы работы со структурами");
    setMinimumSize(750,400);
    glMain = new QGridLayout;
    table = new QTableWidget(0,8);
    table->setHorizontalHeaderLabels(QStringList() << "Бригада"<<"Цена за тонну"<<"ПН"<<"ВТ"<<"СР"<<"ЧТ"<<"ПТ"<<"Итого");
    txt = new QLineEdit("1 198 50 40.5 6.2 48 33.5");
    add = new QPushButton("Добавить");
    readd = new QPushButton("Считать");
    glMain->setRowStretch(0,5);
    glMain->setRowStretch(1,1);
    glMain->addWidget(txt,1,0);
    glMain->addWidget(table,0,0,1,3);
    glMain->addWidget(add,1,1);
    glMain->addWidget(readd,1,2);
    wCenter = new QWidget;
    wCenter->setLayout(glMain);
    this->setCentralWidget(wCenter);
    connect(add,SIGNAL(clicked()),this,SLOT(add_row()));
    connect(readd,SIGNAL(clicked()),this,SLOT(read()));
}
 
void MainWindow::add_row(){
    QString all = txt->text();
    QStringList list = all.split(" ");
    int row=table->rowCount();
 
    if(list.count()==7){
        table->setRowCount(row+1);
        table->setItem(row,0,new QTableWidgetItem(list[0]));
        table->setItem(row,1,new QTableWidgetItem(list[1]));
        table->setItem(row,2,new QTableWidgetItem(list[2]));
        table->setItem(row,3,new QTableWidgetItem(list[3]));
        table->setItem(row,4,new QTableWidgetItem(list[4]));
        table->setItem(row,5,new QTableWidgetItem(list[5]));
        table->setItem(row,6,new QTableWidgetItem(list[6]));
    }else qDebug()<<"Кол-во элементов добавляемых в строку должно быть равно 7";
}
 
void MainWindow::read(){
    int row = table->rowCount();
    for(int i=0; i<row;i++){
        coal[i].group=table->item(i,0)->text().toFloat();
        coal[i].price=table->item(i,1)->text().toFloat();
        coal[i].pn=table->item(i,2)->text().toFloat();
        coal[i].vt=table->item(i,3)->text().toFloat();
        coal[i].sr=table->item(i,4)->text().toFloat();
        coal[i].ch=table->item(i,5)->text().toFloat();
        coal[i].pt=table->item(i,6)->text().toFloat();
    }
    sum(coal,row);
}
void MainWindow::calc(QVector <int> data){
    int row = table->rowCount();
    for(int i=0; i<row;i++){
        table->setItem(i,7,new QTableWidgetItem(data[i]));
    }
}
1
2 / 2 / 0
Регистрация: 17.02.2013
Сообщений: 142
22.09.2013, 13:12  [ТС] 10
Спасибо !!! Замечательно! Урок усвоил.
0
22.09.2013, 13:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2013, 13:12
Помогаю со студенческими работами здесь

Передача структуры в функцию
Пытаюсь реализовать функцию для работы со структурой для комплексного числа. Сама структура:...

Передача структуры в функцию
Написал код самой программы,все работает,а вот как сделать так,чтобы стуктуру передать в функцию не...

Передача структуры в функцию
Пишу программу по структурам... Хочу передать в функцию объекты структуры, т.е. zakaz и параметр...

Передача структуры в функцию
структура к примеру: struct GamePoint { int x; int y; }; Функция допустим вот такая: void...


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

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