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

ошибка с перегрузкой операции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задание на строки и символы http://www.cyberforum.ru/cpp-beginners/thread609715.html
Дана строка символов. Напечатать слова, которые начинаются и заканчиваются одной и той же буквой.
C++ Длина текста не больше 150 символов, могут быть использованы любые символы Задание: Задан текст, состоящий из слов, записанных через запятые и/или пробел, и заканчивающийся точкой. Длина текста не больше 150 символов, могут быть использованы любые символы. Словом считается последовательность символов, не содержащая пробел. Сформировать новую строку из 7-символьных слов, состоящих из латинских букв, не имеющих аналогов записи в русском языке. Найти первое цифровое... http://www.cyberforum.ru/cpp-beginners/thread609699.html
C++ Ругается на оператор strcmp
Создал базовый класс: #include <stdio.h> #include <conio.h> #include <iostream.h> #include <io.h> class Aviopolet {
vector и выбор наименьшего значения двумя соседними числами C++
Суть задачи: Считайте последовательности чисел типа double в вектор. Будем считать, что каждое значение представляет собой расстояние между двумя городами, распо- ложенными на определенном маршруте. Вычислите и выведите на печать общее расстояние (сумму всех расстояний). Найдите и выведите на печать наименьшее и наибольшее расстояние между двумя соседними городами. Найдите и выведи- те...
C++ Одномерный массив. Найти количество палиндромов. http://www.cyberforum.ru/cpp-beginners/thread609657.html
Помогите написать программу...... Найти количество тех элементов массива, которые являются палиндромами (т.е. читаются одинаково слева направо и справа налево), а также найти минимальный элемент среди тех, цифровая запись которых дает сумму, кратную трем.
C++ return и ptheread Вот код создание двух потоков... #include"stdafx.h" #include <stdio.h> #include <iostream> #include <pthread.h> #include <Windows.h> void *thread1(void*X) { for(int i=0;i<10;++i) подробнее

Показать сообщение отдельно
No10
 Аватар для No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
19.06.2012, 23:05     ошибка с перегрузкой операции
Долго сижу и никак не могу понять в чём ошибка. Вот 3 файла. Они подключены правильно и работают.
main.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
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <math.h>
#include "string2.h"
 
using namespace std;
 
char bufRus[256];
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
}
 
int main()
{
    Date d1, d2(2, 24, 1995), d3(0, 99, 8045);
    cout << Rus("d1 равен: ") << d1 << endl;
    cout << Rus("d2 равен: ") << d2 << endl;
    cout << Rus("d3 равен: ") << d3 << endl;
 
    cout << Rus("d2 += 7 равно: ") << (d2 += 7) << endl << endl;
 
    Date d4(19, 6, 2012);
    cout << Rus("d4 равен: ") << d4 << endl;
    cout << "d4++ = " << ++d4 << endl; // сдесь ошибка как утверждает компилятор
 
    system("pause");
    return 0;
}


string2.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
24
25
26
27
28
#ifndef STRING2_H
#define STRING2_H
 
#include <iostream>
 
using namespace std;
 
class Date {
        friend ostream &operator<<(ostream &output, Date &);
    public:
        Date(int m = 1, int d = 1, int Y = 1995);
 
        void setDate(int, int, int);
        Date operator++();
        Date operator++(int);
        Date &operator+=(int);
 
        int leapYear(int);
        int endOfMonth(int);
    private:
        int month;
        int day;
        int year;
        static int days[];
        void helpIncrement();
};
 
#endif // STRING2_H
string2.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <math.h>
#include "string2.h"
 
using namespace std;
 
char bufRus2[256];
char* Rus2(const char* text) {
      CharToOem(text, bufRus2);
      return bufRus2;
}
 
int Date::days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 
Date::Date(int m, int d, int y) { setDate(m, d, y); }
 
void Date::setDate(int mm, int dd, int yy)
{
    month = (mm >= 1 && mm <= 12) ? mm : 1;
    year = (yy >= 1900 && yy <= 2100) ? yy : 1995;
 
    if (month == 2 && leapYear(year))
        day = (dd >= 1 && dd <= 29) ? dd : 1;
    else
        day = (dd >= 1 && dd <= days[month]) ? dd : 1;
}
 
Date Date::operator++ ()
{
    helpIncrement();
    return *this; // возвращаем не ссылку, а значение
}
 
Date Date::operator++(int)
{
    Date temp = *this;
    helpIncrement();
    return temp;
}
 
Date &Date::operator+= (int addInitionalDays)
{
    for (int i = 0; i <= addInitionalDays; i++)
        helpIncrement();
 
    return *this;
}
 
int Date::leapYear(int y)
{
    if (y % 400 == 0 || (y % 100 != 0 && y % 4 != 0))
        return 1;
    else
        return 0;
}
 
int Date::endOfMonth(int d)
{
    if (month == 2 && leapYear(year))
        return d == 29;
    else
        return d == days[month];
}
 
void Date::helpIncrement()
{
    if (endOfMonth(day) && month == 12) {
        day = 1;
        month = 1;
        year++;
    }
    else if (endOfMonth(day)) {
        day = 1;
        month++;
    }
    else day++;
}
 
ostream &operator<< (ostream &output,Date &d)
{
    static char *monthName[13] = {"", "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Сентября", "Октября", "Ноября", "Декабря"};
    output << d.day << " " << Rus2(monthName[d.month]) << " " << d.year;
    return output;
}

А ошибка собсвенно одна:
C++
1
2
 C++\well\main.cpp|26|error: no match for 'operator<<' in 'std::operator<< [with _Traits = ...тра та та ещё на киллометр
||=== Build finished: 1 errors, 0 warnings ===|
Я работаю с книгой и это учебный пример. Дела с ним незаладились сразу.
Я написал ostream &operator<< (ostream &output,Date &d), но в книге
было написано ostream &operator<< (ostream &output,const Date &d),
но огда программа говорила что переменный day и year private. Я убрал всё зврвботало до поры до времени, пока я не стал использовать
перегрженную операцию ++ как префикс, да и как постфикс она тоже не работала.
Пожалуйста кто может растолкуйте новичку код, и особенно зачем нужен был const почему с ним н получалось.
И ещё растолкуйте пожалуйста как функция helpIncrement(); не принимая ни одного параметра може присваивать значения приватным
переменным? ей же нужна ссылка на обьект класса? Очень нуждаюсь в помощи. Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru