Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
#1

Что писать при вызове функции, если передаю всю структуру?

05.03.2017, 21:01. Просмотров 821. Ответов 20
Метки нет (Все метки)

Я создал структуру:
C++
1
2
3
4
5
struct Time {
    double plain;
    double hills;
    double desert;
};
А так же классы с этой структурой:
C++
1
2
3
4
5
class Kamaz {
private:
    char *name;
    Time kamaz;
    friend int FrGreater(Time kamaz, Time tatra);
C++
1
2
3
4
5
class Tatra {
private:
    char *name;
    Time tatra;
    friend int FrGreater(Time kamaz, Time tatra);
А вот как ее вызвать в main?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2017, 21:01
Ответы с готовыми решениями:

Класс - Ошибки при вызове методов: В вызове функции отсутствует список аргументов
Добрый вечер всем! При изучении и написании работы столкнулся с ошибкой от...

Что делать, если хочется писать программы на заказ?
Хачю писать програми на заказ, посоветуйти мне што нибуть

Почему выдает 0, и что надо исправить в вызове функции?
#include <stdio.h> #include <math.h> int ch1,ch2,osn, summa,PROI,PR,pr ; ...

Не правильно передаю аргумент функции
Как такое возможно? printf("V0=%d\n",vectorSize(&vector)); ...

Что происходит при вызове?
class A { ... }; void f(A &a) { ... } A a; ...

20
nmcf
6267 / 5575 / 2536
Регистрация: 14.04.2014
Сообщений: 23,468
05.03.2017, 21:05 #2
Создай структуру перед вызовом и передавай. Или фигурные скобки используй.
0
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
05.03.2017, 21:06  [ТС] #3
Цитата Сообщение от nmcf Посмотреть сообщение
Создай структуру перед вызовом и передавай. Или фигурные скобки используй.
Эм, не понял. Я хотел спросить, что я должен указывать при вызове в качестве аргументов
0
nmcf
6267 / 5575 / 2536
Регистрация: 14.04.2014
Сообщений: 23,468
05.03.2017, 21:07 #4
Вопрос о синтаксисе или о логике программы? Второе только тебе известно.
0
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
05.03.2017, 21:08  [ТС] #5
Цитата Сообщение от nmcf Посмотреть сообщение
Вопрос о синтаксисе или о логике программы? Второе только тебе известно.
Синтаксис.
C++
1
2
3
4
5
6
int main() {
    setlocale(LC_ALL, "russian");
    FrGreater(???????, ????????);
    system("pause");
    return 0;
}
0
nd2
2835 / 2402 / 1057
Регистрация: 29.01.2016
Сообщений: 8,040
05.03.2017, 21:09 #6
C++
1
2
3
Kamaz k;
Tatra t;
FrGreater(k.kamaz, t.tatra);
0
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
05.03.2017, 21:13  [ТС] #7
Цитата Сообщение от nd2 Посмотреть сообщение
Kamaz k;
Tatra t;
Это что?
0
nd2
2835 / 2402 / 1057
Регистрация: 29.01.2016
Сообщений: 8,040
05.03.2017, 21:14 #8
Цитата Сообщение от DenKG Посмотреть сообщение
Это что?
Объекты классов.
0
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
05.03.2017, 21:16  [ТС] #9
Цитата Сообщение от nd2 Посмотреть сообщение
Объекты классов.
Так объекты у меня Time kamaz; и Time tatra;
Как мне в этом случае вызывать?
0
nd2
2835 / 2402 / 1057
Регистрация: 29.01.2016
Сообщений: 8,040
05.03.2017, 21:18 #10
Цитата Сообщение от DenKG Посмотреть сообщение
Так объекты у меня Time kamaz; и Time tatra;
Они и передаются в функцию. Глаза разуй:
Цитата Сообщение от nd2 Посмотреть сообщение
C++
1
FrGreater(k.kamaz, t.tatra);
Я же не k и t передаю.
0
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
05.03.2017, 21:26  [ТС] #11
Цитата Сообщение от nd2 Посмотреть сообщение
Они и передаются в функцию
Не получается Похоже, мне пора на пенсию
Чтобы мозги людям не делать, просто выложу проект)
0
Вложения
Тип файла: rar Source.rar (657 байт, 2 просмотров)
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
05.03.2017, 21:37  [ТС] #12
Цитата Сообщение от nd2 Посмотреть сообщение
Я же не k и t передаю.
Так у меня ведь дружественная функция.
0
nd2
2835 / 2402 / 1057
Регистрация: 29.01.2016
Сообщений: 8,040
05.03.2017, 21:46 #13
Цитата Сообщение от DenKG Посмотреть сообщение
Так у меня ведь дружественная функция.
Знаю. Была бы не дружественная, то и доступа к k.kamaz и t.tatra не было бы. А так есть!
0
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
05.03.2017, 21:46  [ТС] #14
Цитата Сообщение от nd2 Посмотреть сообщение
Знаю. Была бы не дружественная, то и доступа к k.kamaz и t.tatra не было бы. А так есть!
Ну тогда я совсем не понимаю
У меня не получается
0
nd2
2835 / 2402 / 1057
Регистрация: 29.01.2016
Сообщений: 8,040
05.03.2017, 21:51 #15
Цитата Сообщение от DenKG Посмотреть сообщение
просто выложу проект)
Насчёт начала в main(), смотри 6 пост. Только, перед вызовом FrGreater(k.kamaz, t.tatra), нужно для каждого объекта вызвать speed(). Ну, и как-то разобраться с обработкой результатов сравнений в FrGreater(): или внутри функции выводить результат сравнений, или возвращать из функции объект Time, с результирующими полями, и уже в main обрабатывать результат.
0
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
05.03.2017, 21:56  [ТС] #16
Цитата Сообщение от nd2 Посмотреть сообщение
Только, перед вызовом FrGreater(k.kamaz, t.tatra), нужно для каждого объекта вызвать speed()
C++
1
2
3
4
5
6
7
    Kamaz k;
    Tatra t;
 
    k.speed();
    t.speed();
 
    FrGreater(k.Kamaz, t.Tatra);
Так? Но на FrGreater(k.Kamaz, t.Tatra); всё равно ругается. Говорит, что использование имени типа не допускается.

Цитата Сообщение от nd2 Посмотреть сообщение
как-то разобраться с обработкой результатов сравнений
Это я сделал, просто к тому моменту не успел закончить.
0
nd2
2835 / 2402 / 1057
Регистрация: 29.01.2016
Сообщений: 8,040
05.03.2017, 22:07 #17
Цитата Сообщение от DenKG Посмотреть сообщение
Так?
Функция имеет доступ к приватным полям, но это внутри, а в main() нельзя так обрщаться, как я написал. Поэтому, один из вариантов (чтобы не делать get() для доступа к приватным полям в main()), переписать функцию так:
C++
1
friend int FrGreater(const Kamaz& kamaz, const Tatra& tatra);
C++
1
2
3
4
5
    Kamaz k;
    Tatra t;
    k.speed();
    t.speed();
    FrGreater(k, t);
0
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
05.03.2017, 22:11  [ТС] #18
Цитата Сообщение от nd2 Посмотреть сообщение
переписать функцию так
А теперь такие ошибки:
Ошибка C4430 отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
Ошибка C2143 синтаксическая ошибка: отсутствие "," перед "&"
0
nd2
2835 / 2402 / 1057
Регистрация: 29.01.2016
Сообщений: 8,040
05.03.2017, 22:17 #19
Лучший ответ Сообщение было отмечено DenKG как решение

Решение

Цитата Сообщение от DenKG Посмотреть сообщение
А теперь такие ошибки:
Выше класса Kamaz, сделай декларацию:
C++
1
class Tatra;
В функции:
C++
1
2
3
4
5
6
7
8
9
10
int FrGreater(const Kamaz& k, const Tatra& t) 
{
    int plaintResult;
    int hillsResult;
    int desertResult;
    /*------------------------------*/
    if (k.kamaz.plain > t.tatra.plain) {
        plaintResult = 1;
    }
// и т.д.
1
DenKG
5 / 5 / 7
Регистрация: 23.12.2015
Сообщений: 645
05.03.2017, 22:23  [ТС] #20
Цитата Сообщение от nd2 Посмотреть сообщение
Выше класса Kamaz, сделай декларацию:
Уф, большое вам спасибо. И извините за мою тормознутость )
0
05.03.2017, 22:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2017, 22:23

Слишком много аргументов в вызове функции, подчеркивает то что красным
KVITANSIA.H class KVITANTSIA { public: int number; // номер int day,...

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

Ошибка при вызове функции
Добрый день! Есть функция по расчету детерминанта int _det(int size,double...


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

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

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