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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
1ые
1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98
#1

Помогите устранить ошибку в коде. - C++

19.01.2013, 16:05. Просмотров 238. Ответов 6
Метки нет (Все метки)

Здравствуйте не могу понять почему в программе в строке 54 выдает ошибку. У меня в классе массив указателей объявлен как Static.

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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#ifndef DATE_H
#define DATE_H
class date
{
public:
    date(int = 1, int = 1, int = 1990);
    date(int = 1, int = 1990);
    date(char *,int , int);
    void print() const;
    void print_DD_YYYY() const;
    void print_MMDDYYYY() const;
    void print_MOUNTH_DDYYYY() const;
private:
    char *cmounth;
    int mounth;
    int day;
    int year;
    int checkday(int );
};
#include <iostream>
using namespace std;
date::date(char *a, int d, int y)
{
    int i;
    static char *m[12]={"January","February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    for (i = 0; i < 12; i++)
    {
        if (!strcmp(a,m[i]))
            break;
    }
    if ( i < 12)
    {
        cmounth = m[i];
        mounth = i+1;
    }
    else
    {
        cmounth = m[0];
    }
    year = (y > 0 && y < 10000) ? y : 1990;
}
date::date(int m, int d, int y)
{
    if (m > 0 && m < 12)
        mounth = m;
    else
    {
        mounth = 1;
    }
    if (y > 0 && y < 9999)
        year = y;
    else year = 1;
    day = checkday(d);
    cmounth = m[mounth - 1];
}
date::date(int d, int yyyy)
{
    day = (d < 32 && d > 0) ? d : 1;
    year = (yyyy > 0 && yyyy < 10000) ? yyyy : 1990;
    if (!mounth)
        mounth = 1;
    cmounth = m[mounth - 1];
}
date::date(char *a, int d, int y)
{
    static char *m[12]={"January","February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    for (int i = 0; i < 12; i++)
    {
        if (!strcmp(a,m[i]))
            break;
    }
    if ( i < 12)
    {
        cmounth = m[i];
        mounth = i+1;
    }
    else
    {
        cmounth = m[0];
    }
    year = (y > 0 && y < 10000) ? y : 1990;
}
int date::checkday(int td)
{
    static int tdm[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if(mounth == 2)
    {
        if ( td == 29 && year % 4 == 0 )
        return td;
        else
            if(td == 28 && year % 4 != 0)
            {
                return td;
            }
            else
            return 1;
    }
    else
    if (td > 0 && td <= tdm[mounth])
        return td;
    return 1;
}
void date::print() const
{
    cout << mounth << "-" << day << "-" << year;
}
void date::print_DD_YYYY() const
{
    cout << (day < 10) ? '0' << day << ' ' << year;
}
void date::print_MMDDYYYY() const
{
    cout << endl << (mounth < 10) ? '0' << mounth << '/'; 
    cout << (day < 10) ? '0' << day << '/';
    cout << year;
}
void date::print_MOUNTH_DDYYYY() const
{
    cout << endl << cmounth << ' ' << (day < 10)? '0'
        day << ',' << year; 
}
#endif
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12702 / 7176 / 801
Регистрация: 27.09.2012
Сообщений: 17,702
Записей в блоге: 2
Завершенные тесты: 1
19.01.2013, 16:17     Помогите устранить ошибку в коде. #2
m - это переменная int, а Вы к операцию индексации применяете

Добавлено через 2 минуты
В следующем методе m вообще нет. В 72 строчке i не доступна.
119, 120 - двоеточие забыли?
1ые
1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98
19.01.2013, 16:37  [ТС]     Помогите устранить ошибку в коде. #3
Да прошу прощения, недавно в этом форуме ошибки все исправил кроме 2ух 54 и 62 строка. Разве переменные static не всему классу видны?
C++ (Qt)
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
109
110
111
#ifndef DATE_H
#define DATE_H
class date
{
public:
    date(int = 1, int = 1, int = 1990);
    date(int = 1, int = 1990);
    date(char *,int , int);
    void print() const;
    void print_DD_YYYY() const;
    void print_MMDDYYYY() const;
    void print_MOUNTH_DDYYYY() const;
private:
    char *cmounth;
    int mounth;
    int day;
    int year;
    int checkday(int );
};
#include <iostream>
using namespace std;
date::date(char *a, int d, int y)
{
    int i;
    static char *m[12]={"January","February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    for (i = 0; i < 12; i++)
    {
        if (!strcmp(a,m[i]))
            break;
    }
    if ( i < 12)
    {
        cmounth = m[i];
        mounth = i+1;
    }
    else
    {
        cmounth = m[0];
    }
    year = (y > 0 && y < 10000) ? y : 1990;
}
date::date(int mm, int d, int y)
{
    if (mm > 0 && mm < 12)
        mounth = mm;
    else
    {
        mounth = 1;
    }
    if (y > 0 && y < 9999)
        year = y;
    else year = 1;
    day = checkday(d);
    cmounth = m[mounth - 1];
}
date::date(int d, int yyyy)
{
    day = (d < 32 && d > 0) ? d : 1;
    year = (yyyy > 0 && yyyy < 10000) ? yyyy : 1990;
    if (!mounth)
        mounth = 1;
    cmounth = m[mounth - 1];
}
int date::checkday(int td)
{
    static int tdm[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if(mounth == 2)
    {
        if ( td == 29 && year % 4 == 0 )
        return td;
        else
            if(td == 28 && year % 4 != 0)
            {
                return td;
            }
            else
            return 1;
    }
    else
    if (td > 0 && td <= tdm[mounth])
        return td;
    return 1;
}
void date::print() const
{
    cout << mounth << "-" << day << "-" << year;
}
void date::print_DD_YYYY() const
{
    if(day < 10)
        cout << '0';
    cout << day << ' ' << year;
}
void date::print_MMDDYYYY() const
{
    cout << endl;
    if (mounth < 10)
        cout << '0';
    cout << mounth << '/'; 
    if(day < 10)
        cout <<'0';
    cout << '/' << year;
}
void date::print_MOUNTH_DDYYYY() const
{
    cout << endl << cmounth << ' ';
    if(day < 10)
        cout << '0';
    cout << day << ',' << year; 
}
#endif
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
19.01.2013, 17:02     Помогите устранить ошибку в коде. #4
static char * m[12] - локальная переменная для функции, в данном случае для конструктора. Естественно, другие функции ничего о ней не знают.

Цитата Сообщение от 1ые Посмотреть сообщение
Разве переменные static не всему классу видны?
Нет, static не меняет область видимости, идентификатор переменной известен только внутри функции.
1ые
1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98
19.01.2013, 17:40  [ТС]     Помогите устранить ошибку в коде. #5
А нельзя переменную объявить так чтобы всему классу видно было?
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
19.01.2013, 17:53     Помогите устранить ошибку в коде. #6
1ые, можно сделать ее членом класса.

C++
1
2
3
4
5
6
7
8
9
class MyClass
{
private:
    // объявление
    static const char * m[12];
};
 
// инициализация
const char * MyClass::m[12] = {"January","February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
И еще, все же это должен быть массив указателей на константные данные, нужен спецификатор const.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 18:07     Помогите устранить ошибку в коде.
Еще ссылки по теме:

C++ Помогите устранить ошибку: ссылка на неразрешенный внешний символ
C++ Помогите исправить ошибку в коде
Помогите найти ошибку в коде C++
Найти и устранить ошибку в коде программы, возникающую при сортировке самодельного списка C++
Устранить ошибку в коде C++

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

Или воспользуйтесь поиском по форуму:
1ые
1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98
19.01.2013, 18:07  [ТС]     Помогите устранить ошибку в коде. #7
спасибо)
Yandex
Объявления
19.01.2013, 18:07     Помогите устранить ошибку в коде.
Ответ Создать тему
Опции темы

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