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

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

Восстановить пароль Регистрация
 
wollk
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 142
21.09.2013, 23:52     Передача структуры в функцию #1
Здравствуйте, объясните пожалуйста, как передать структуру в функцию. Пользовался поиском, но ничего не понял


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)'
Заранее спасибо !
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Leshak
259 / 235 / 40
Регистрация: 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;
}
wollk
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 142
22.09.2013, 00:31  [ТС]     Передача структуры в функцию #3
Теперь такое:
Миниатюры
Передача структуры в функцию  
Leshak
259 / 235 / 40
Регистрация: 10.12.2011
Сообщений: 513
22.09.2013, 00:36     Передача структуры в функцию #4
Полный код программы скинь.
wollk
1 / 1 / 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;
}
Leshak
259 / 235 / 40
Регистрация: 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) обрамляй в соответствующие теги )
А то я тут понимаешь разогнался, а очевидной вещи не заметил
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 01:31     Передача структуры в функцию #7
wollk, у вас двойное определение функции. Вот так нельзя делать:
C++
1
#include "struct.cpp"
wollk
1 / 1 / 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)
Поэксперементируй )
Если на точки будет ругаться, ставь указатели ( стрелочки ).
Я же в функцию передаю массив. В любом случае ни так, ни так не работает (
alsav22
5282 / 4801 / 442
Регистрация: 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]));
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 13:12     Передача структуры в функцию
Еще ссылки по теме:

Передача структуры в функцию C++
Передача в функцию ячейку структуры C++
C++ Передача члена структуры в функцию

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

Или воспользуйтесь поиском по форуму:
wollk
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 142
22.09.2013, 13:12  [ТС]     Передача структуры в функцию #10
Спасибо !!! Замечательно! Урок усвоил.
Yandex
Объявления
22.09.2013, 13:12     Передача структуры в функцию
Ответ Создать тему
Опции темы

Текущее время: 07:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru