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

Ошибка в классе

14.11.2016, 22:17. Показов 1581. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#pragma once
#include <iostream>
using namespace std;
class Drob
{
private:
    int num;
    unsigned int den;
    int Drob::GCD(int a, int b) const;
    int Drob::LCM(int a, int b) const;
    void Drob::sok();
public:
    Drob();
    Drob() :num(1), den(1) {};
    Drob(int n, unsigned int d);
    double res();
    Drob operator+(Drob& d1) const;
    Drob operator*(Drob& d1) const;
    Drob operator-(Drob& d1) const;
    Drob operator/(Drob& d1) const;
    bool operator==(Drob& d1) const;
    friend ostream& operator<<(ostream& os, Drob& d1);
 
    ~Drob();
};

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "Drob.h"
 
 
 
Drob::Drob()
{
}
 
int Drob::GCD(int a, int b) const
{
    if (a < 0)
        a *= -1;
    while (b)
    {
        a %= b;
        swap(a, b);
    }
    return a;
}
 
int Drob::LCM(int a, int b) const
{
    return a*b / GCD(a, b);
}
 
void Drob::sok()
{
    int nod = GCD(num, den);
    num /= nod;
    den /= nod;
}
    Drob::Drob() :num(1), den(1) {};
    Drob::Drob(int n, unsigned int d)
    {
        if (d != 0)
        {
            num = n;
            den = d;
            sok();
        }
        else
        {
            cout << "Denominator 0!!!";
            Drob();
        }
    }
    double Drob::res()
    {
        return (double)num / (double)den;
    }
 
     operator+Drob::(Drob& d1) const // вот здесь ошибка 
    {
        Drob res;
        if (den == d1.den)
        {
            res.den = den;
            res.num = num + d1.num;
            res.sok();
            return res;
        }
 
        int lcm = LCM(den, d1.den);
        int x = lcm / den;
        int y = lcm / d1.den;
        res.den = lcm;
        res.num = num*x + d1.num*y;
        res.sok();
        return res;
    }
 
    Drob::Drob operator*(Drob& d1) const
    {
        return Drob(num * d1.num, den*d1.den);
    }
 
    Drob operator-(Drob& d1) const
    {
        return Drob(num, den) + Drob(-d1.num, d1.den);
    }
 
    Drob operator/(Drob& d1) const
    {
        return Drob(num * d1.den, den*d1.num);
    }
 
    bool operator==(Drob& d1) const
    {
        if (d1.num == num && d1.den == den)
            return true;
        else
        {
            return false;
        }
    }
 
    friend ostream& operator<<(ostream& os, Drob& d1)
    {
        os << d1.num << "\" << d1.den;
        return os;
    }
 
};
 
 
Drob::~Drob()
{
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2016, 22:17
Ответы с готовыми решениями:

Ошибка в классе
Добрый вечер! Кому не сложно помогите, пожалуйста, найти ошибку! Не правильно прибавляет вектора....

Ошибка в классе
Выдает ошибку! Не понимаю в чем проблема. Помогите пожалуйста! Для нестатического поля, метода или...

Ошибка в классе
Error 1 error C2535: 'float Class1::FM(float ,float )' : member function already defined or...

Ошибка в классе
Доброго времени суток! Недавно прочитал тему классы, посмотрел и инете видео-урок и решил закрепить...

8
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.11.2016, 23:11 2
Как выглядит ошибка?
0
1 / 1 / 2
Регистрация: 24.02.2016
Сообщений: 131
14.11.2016, 23:16  [ТС] 3
operator+Drob:Drob& d1) const

Добавлено через 20 секунд
C++
1
operator+Drob::(Drob& d1) const
Добавлено через 1 минуту
имя оператора должно быть объявлено как функция, только начал изучать классы и перегрузку поэтому очень понимаю все тонкости
0
Вездепух
Эксперт CЭксперт С++
12807 / 6680 / 1799
Регистрация: 18.10.2014
Сообщений: 16,917
14.11.2016, 23:17 4
Лучший ответ Сообщение было отмечено Croessmah как решение

Решение

Цитата Сообщение от draka08 Посмотреть сообщение
C++
1
int Drob::GCD(int a, int b) const;
C++ запрещает использовать квалифицированные имена для объявления членов класса внутри класса. Поэтому

C++
1
int GCD(int a, int b) const;
Без Drob::

Цитата Сообщение от draka08 Посмотреть сообщение
C++
1
operator+Drob::(Drob& d1) const // вот здесь ошибка
C++
1
2
Drob Drob::operator+(Drob& d1) const
{
Но на самом деле надо все переделать на

C++
1
2
Drob Drob::operator+(const Drob& d1) const
{
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.11.2016, 23:19 5
C++
1
Drob Drob::operator+(Drob& d1)
0
Вездепух
Эксперт CЭксперт С++
12807 / 6680 / 1799
Регистрация: 18.10.2014
Сообщений: 16,917
14.11.2016, 23:21 6
Цитата Сообщение от draka08 Посмотреть сообщение
C++
1
Drob::Drob operator*(Drob& d1) const
Что это за белиберда - не ясно.

Цитата Сообщение от draka08 Посмотреть сообщение
C++
1
Drob operator-(Drob& d1) const
Все переделывать как показано выше.
0
1 / 1 / 2
Регистрация: 24.02.2016
Сообщений: 131
14.11.2016, 23:34  [ТС] 7
спасибо а как переделать
C++
1
 friend ostream& operator<<(ostream& os, Drob& d1)
0
59 / 54 / 34
Регистрация: 18.04.2014
Сообщений: 122
14.11.2016, 23:41 8
Лучший ответ Сообщение было отмечено draka08 как решение

Решение

draka08, привел к компилируемому виду. Вы почитайте про операцию разрешение контекста и все должно стать понятным. Про friend: в реализации это ключевое слово не указывается, только в объявлении класса.
Кликните здесь для просмотра всего текста
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
class Drob {
private:
    int num;
    unsigned int den;
    int GCD(int a, int b) const;
    int LCM(int a, int b) const;
    void sok();
public:
    Drob() :
            num(1), den(1) {
    }
    ;
    Drob(int n, unsigned int d);
    double res();
    Drob operator+(const Drob& d1) const;
    Drob operator*(Drob& d1) const;
    Drob operator-(Drob& d1) const;
    Drob operator/(Drob& d1) const;
    bool operator==(Drob& d1) const;
    friend ostream& operator<<(ostream& os, Drob& d1);
 
    ~Drob();
};
 
int Drob::GCD(int a, int b) const {
    if (a < 0)
        a *= -1;
    while (b) {
        a %= b;
        swap(a, b);
    }
    return a;
}
 
int Drob::LCM(int a, int b) const {
    return a * b / GCD(a, b);
}
 
void Drob::sok() {
    int nod = GCD(num, den);
    num /= nod;
    den /= nod;
}
Drob::Drob(int n, unsigned int d) {
    if (d != 0) {
        num = n;
        den = d;
        sok();
    } else {
        cout << "Denominator 0!!!";
        Drob();
    }
}
double Drob::res() {
    return (double) num / (double) den;
}
 
Drob Drob::operator+(const Drob& d1) const // вот здесь ошибка
{
    Drob res;
    if (den == d1.den)
    {
        res.den = den;
        res.num = num + d1.num;
        res.sok();
        return res;
    }
 
    int lcm = LCM(den, d1.den);
    int x = lcm / den;
    int y = lcm / d1.den;
    res.den = lcm;
    res.num = num*x + d1.num*y;
    res.sok();
    return res;
}
 
Drob Drob::operator*(Drob& d1) const {
    return Drob(num * d1.num, den * d1.den);
}
 
Drob Drob::operator-(Drob& d1) const {
    return Drob(num, den) + Drob(-d1.num, d1.den);
}
 
Drob Drob::operator/(Drob& d1) const {
    return Drob(num * d1.den, den * d1.num);
}
 
bool Drob::operator==(Drob& d1) const {
    if (d1.num == num && d1.den == den)
        return true;
    else {
        return false;
    }
}
 
ostream& operator<<(ostream& os, Drob& d1) {
    os << d1.num << "" << d1.den;
    return os;
}
 
 
Drob::~Drob() {
}
1
1 / 1 / 2
Регистрация: 24.02.2016
Сообщений: 131
14.11.2016, 23:48  [ТС] 9
Большое спасибо
0
14.11.2016, 23:48
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2016, 23:48
Помогаю со студенческими работами здесь

Ошибка в классе
Начал читать литературу по java, сказано написать простенький класс. Но у меня ошибка в компиляции...

Ошибка в классе
Вот код: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; typedef long long int...

Ошибка в классе
Не могу понять где ошибка вот код: #include &lt;iostream&gt; using namespace std; class time { ...

Ошибка в классе
Проблема с выделением памяти(она не выделяется), а так же при вводе ключа, не выдает value ...

Ошибка в классе
Есть мойкласс. Когда создаю объект этого класса, проэкт не компилируется из-за ошибки: мойкласс...

Ошибка в классе
При попытке ввода новой пары слов, программа вылетает, так же вылетает при попытке вводы с уже...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru