Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
anapshy
214 / 207 / 184
Регистрация: 14.11.2016
Сообщений: 808
Завершенные тесты: 3
1

Указатель на Класс_1 в Классе_2 (динамическое выделение памяти)

23.04.2017, 14:28. Просмотров 746. Ответов 3
Метки нет (Все метки)

Как фиксануть ошибку? Может не правильно как-то вызываю?
GetDifference не менять, она должна принимать класс по ссылке!
P.s. или если можно как-то перегрузить GetDifference, то пожалуйста, буду благодарен!
P.s.s. но желательно без перегрузки, а исправить ошибку

toString(void) возвращает разницу во времени
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
#include <iostream>
class Time {
private:
    int h = 2, m = 5, s = 3;
public:
 
    Time(int _h, int _m, int _s) : h(_h), m(_m), s(_s) {};
 
    int inSec(void) {
        return (this->h * 60 * 60) + (this->m * 60) + this->s;
    }
 
    int GetDifference(Time &a) {
        return this->inSec() - a.inSec();
    }
 
    ~Time(void) {};
 
};
 
class Bill {
private:
    Time *start_call, *end_call;
public:
 
    Bill(int h, int m, int s) {
        start_call = new Time( h, m, s );
        end_call = new Time( h+2, m+2, s+2 );
    };
 
    int toString(void) {
        return this->end_call->GetDifference( this->start_call ); /* ТУТ ОШИБКА */
    }
 
    ~Bill(void) {
        delete start_call;
        delete end_call;
    };
 
};
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2017, 14:28
Ответы с готовыми решениями:

Указатель. Динамическое выделение памяти
На мое мнение должно работать, но что-то не так.Помогите разобраться буду очень благодарен. int...

Распределение памяти. Динамическое выделение памяти
an-1 an-2 ... a2

Динамическое выделение памяти
Добрый день. Возник вопрос: Как мне узнать адрес последнего байта в выделенной памяти? Я выделил...

Динамическое выделение памяти
Всем здрасти.Если выделять динамически память,например: char *p=new char; и при этом не...

Динамическое выделение памяти
Подскажите как выделить динамически память мод двумерный массив... Спасибо. ... int *mass = new...

3
NRX
21 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 149
Завершенные тесты: 1
23.04.2017, 14:34 2
anapshy, Здравствуйте, в вызываемой функции требуется передать объект, а не указатель на него, по этому указатель требуется разыменовывать
C++
1
2
3
int toString(void) {
        return this->end_call->GetDifference( *(this->start_call) ); 
    }
1
anapshy
214 / 207 / 184
Регистрация: 14.11.2016
Сообщений: 808
Завершенные тесты: 3
23.04.2017, 15:12  [ТС] 3
NRX, ещё в Bill у меня перегружен вывод:
C++
1
2
3
4
5
6
7
8
9
ostream& operator << (ostream &os, const Bill &a) {
    os << "Name: " << a.name << endl; // это в private Bill ( я просто вырезал из кода )
    os << "Number: " << a.number << endl; // это в private Bill ( я просто вырезал из кода )
    os << "Discount: " << a.discount << endl; // это в private Bill ( я просто вырезал из кода )
    os << "Call start: " << a.start_call << endl; /* может тут проблема? */ // оператор вывода для Time тоже перегружен и с обычными объектами работает нормально
    os << "End of call: " << a.end_call << endl; /* может тут проблема? */ // оператор вывода для Time тоже перегружен и с обычными объектами работает нормально
    os << "To pay: " << a.toString() << endl << endl; /* теперь тут ругается */
    return os;
}
C
1
2
Ошибка  C2662   int Bill::toString(void): невозможно преобразовать указатель "this" из "const Bill" в "Bill &"
Ошибка (активно)        объект содержит квалификаторы типа, несовместимые с членом функцию "Bill::toString"
Добавлено через 31 минуту
Исправил: убрал const >>> ostream& operator << (ostream &os, const Bill &a)
0
NRX
21 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 149
Завершенные тесты: 1
23.04.2017, 17:41 4
Лучший ответ Сообщение было отмечено anapshy как решение

Решение

anapshy, у вас не работало с квалификатором const, потому что в методе вы вызываете не константную функцию, а объект константа.
функцию toString требуется сделать константной
C++
1
2
3
4
int toString(void) const
{
        return this->end_call->GetDifference( *(this->start_call) ); 
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2017, 17:41

Динамическое выделение памяти
Первый раз столкнулся с такой задачей... Дали лабораторную работу: Разработать приложения,...

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

Динамическое выделение памяти
Дан такой код:#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { int...


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

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

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