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

Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" - C++

Восстановить пароль Регистрация
 
demigod324
4 / 2 / 0
Регистрация: 17.03.2013
Сообщений: 102
10.06.2014, 02:17     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #1
При компиляции, появляется ошибка:
C++
1
[C++ Error] Unit1.cpp(15): E2453 Size of the type 'char[]' is unknown or zero
Помогите исправить.

Вот текст программы:
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
struct traine {                    //структура - дерево
    unsigned long time;            //время отправления в секундах
    unsigned short number;        //номер поезда
    char *station;                //имя станции
    traine *left,*right;};        //указатели на левую и правую ветку дерева
traine* add(traine *beg, unsigned short number, unsigned long time, char station[50])    //функция добавления элемента в дерево
{
    if (!beg) {                        //если дерево пустое
        traine *temp=new traine;
        temp->number=number;
        temp->time=time;
        temp->station = new char[];
        temp->station=station;
        temp->left=0;
        temp->right=0;
        return temp;
    }                //если дерево не пустое, начинается рекурсивный вход в него
    else if ((number)>(beg->number)) {    //бОльшие номера идут в правое поддерево
        beg->right=add(beg->right,number, time, station);
        return beg;
    }
    else {        //меньшие номера идут в левое поддерево
        beg->left=add(beg->left,number, time, station);
        return beg;}
}
void show_all(traine *temp){    //функция вывода всего дерева - рекурсивный обход слева направо
    unsigned long d,h,m,s,t;
    if (temp){
        show_all(temp->left);
        t=temp->time;s=t%60;t=(t-s)/60;m=t%60;t=(t-m)/60;h=t%24;d=(t-h)/24;//разложение времени на дни, часы, минуты и секунды
        cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << endl << "Station:" << temp->station << endl;
        show_all(temp->right);}
}
void show_number(traine *temp, unsigned short number){ //поиск элемента с нужным номером, с учётом отсортированности дерева
    unsigned long d,h,m,s,t;
    if (temp){
        if (temp->number<number) {show_number(temp->right,number);}
        else if (temp->number>number) {show_number(temp->left,number);}
        else{
        t=temp->time;s=t%60;t=(t-s)/60;m=t%60;t=(t-m)/60;h=t%24;d=(t-h)/24;
        cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << endl << "Station:" << temp->station << endl;
        return;}
    }
        cout << "There is no such records\n";}
void show_station(traine *temp, char st[50],bool &f){ //переменная f нужна для определения, был ли найден хотя бы 1 поезд, т.к. обход производится "втупую", т.к. дерево сортировано не по имени станции
    if (temp){
        if (st == (temp->station)) //если найден подходящий поезд
        {
            f=1;
            unsigned long d,h,m,s,t,f;
            t=temp->time;s=t%60;t=(t-s)/60;m=t%60;t=(t-m)/60;h=t%24;d=(t-h)/24;
            cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << f<<endl << "Station:" << temp->station << endl << endl;
        }
        show_station(temp->right,st,f); //просмотр правого поддерева
        show_station(temp->left,st,f);    //просмотр левого поддерева
    }
}
int main() {    //главная функция
    char k;        //временная переменная для чтения 1 символа для выбора пунктов меню
    bool f;        //переменная для использования с функцией поиска по имени станции
    char strtmp[80];    //временная переменная для чтения с клавиатуры
    traine *list=0;    //дерево, изначально являющееся пустым
    unsigned short d,h,m,s;    //переменные для разложения времени на дни, часы, минуты и секунды
    unsigned short number;    //временный номер
    char station[30];    //временная станция
    do{//главный цикл меню
    cout << "Enter your choice:\n[1] Add new record\n[2] View all records\n[3] View a specific train number\n[4] View all trains aimed to a specified station\n[0] Exit program\n";
    do{
    cin >> k;//ввод выбора (а далее всё понятно и так)
    if (k=='1'){
        do{
            cout << "Train number:\n";
            cin >> strtmp;
            number=atoi(strtmp);
        }while (!(number>0));
        do{
            cout << "Number of days:\n";
            cin >> strtmp;
            d=atoi(strtmp);
            cout << "Number of hours:\n";
            cin >> strtmp;
            h=atoi(strtmp);
            cout << "Number of minutes:\n";
            cin >> strtmp;
            m=atoi(strtmp);
            cout << "Number of seconds:\n";
            cin >> strtmp;
            s=atoi(strtmp);
        }while(d==0 && h==0 && m==0 && s==0);
        cout << "Station name:\n";
        cin >> station;
        list=add(list,number,s+m*60+h*3600+d*86400,station);
            
    }
    else if (k=='2'){
        if (list){
            show_all(list);}
        else {cout << "There is no trains\n";}}
    else if (k=='3'){
        cout << "Enter a train number:";
        do{
            cin >> strtmp;
            number=atoi(strtmp);
        }while (!(number>0));
        show_number(list,number);}
    else if (k=='4'){
        cout << "Enter a station name:";
        cin >>station;
        f=0;
        show_station(list,station,f);
        if (!f) {cout << "There is no trains\n";}
    }
    }while (!((k=='4')||(k=='3')||(k=='2')||(k=='1')||(k=='0')));
    }while (!(k=='0'));
    return 1;}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.06.2014, 02:23     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #2
Цитата Сообщение от demigod324 Посмотреть сообщение
[C++ Error] Unit1.cpp(15): E2453 Size of the type 'char[]' is unknown or zero
Помогите исправить.
Размер массива задайте.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
10.06.2014, 02:25     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #3
строки 15-16 замеите на
C++
1
2
    temp->station = new char[50];
    strcpy(temp->station,station);
или используйте класс std::string
demigod324
4 / 2 / 0
Регистрация: 17.03.2013
Сообщений: 102
10.06.2014, 02:28  [ТС]     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #4
alsav22, тогда появляются другие две ошибки:
C++
1
2
[Linker Error] Unresolved external '__InitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl
[Linker Error] Unresolved external '__ExitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl
Добавлено через 2 минуты
Cra3y, так же появляются эти ошибки:
C++
1
2
[Linker Error] Unresolved external '__InitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl
[Linker Error] Unresolved external '__ExitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.06.2014, 02:31     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #5
Это уже к тексту кода не имеет отношения. Линкер чего-то не находит в либах среды.

Добавлено через 1 минуту
В коде ещё есть использование неинициализированных переменных. Предупреждения на эту тему были? Если были - исправляйте.
demigod324
4 / 2 / 0
Регистрация: 17.03.2013
Сообщений: 102
10.06.2014, 02:36  [ТС]     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #6
alsav22, alsav22, нет, больше ни на что не ругается.

Добавлено через 4 минуты
Фух, всё разобрался, новый проект сделал, теперь так выглядит, все работает норм)
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
123
124
125
126
127
128
129
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
struct traine {                    //структура - дерево
    unsigned long time;            //время отправления в секундах
    unsigned short number;        //номер поезда
    char *station;                //имя станции
    traine *left,*right;};        //указатели на левую и правую ветку дерева
traine* add(traine *beg, unsigned short number, unsigned long time, char station[50])    //функция добавления элемента в дерево
{
    if (!beg) {                        //если дерево пустое
        traine *temp = new traine;
        temp->number=number;
        temp->time=time;
        temp->station = new char[50];
    strcpy(temp->station,station);
 
        temp->left=0;
        temp->right=0;
        return temp;
    }                //если дерево не пустое, начинается рекурсивный вход в него
    else if ((number)>(beg->number)) {    //бОльшие номера идут в правое поддерево
        beg->right=add(beg->right,number, time, station);
        return beg;
    }
    else {        //меньшие номера идут в левое поддерево
        beg->left=add(beg->left,number, time, station);
        return beg;}
}
void show_all(traine *temp){    //функция вывода всего дерева - рекурсивный обход слева направо
    unsigned long d,h,m,s,t;
    if (temp){
        show_all(temp->left);
        t=temp->time;s=t%60;t=(t-s)/60;m=t%60;t=(t-m)/60;h=t%24;d=(t-h)/24;//разложение времени на дни, часы, минуты и секунды
        cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << endl << "Station:" << temp->station << endl;
        show_all(temp->right);}
}
void show_number(traine *temp, unsigned short number){ //поиск элемента с нужным номером, с учётом отсортированности дерева
    unsigned long d,h,m,s,t;
    if (temp){
        if (temp->number<number) {show_number(temp->right,number);}
        else if (temp->number>number) {show_number(temp->left,number);}
        else{
        t=temp->time;s=t%60;t=(t-s)/60;m=t%60;t=(t-m)/60;h=t%24;d=(t-h)/24;
        cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << endl << "Station:" << temp->station << endl;
        return;}
    }
        cout << "There is no such records\n";}
void show_station(traine *temp, char st[50],bool &f){ //переменная f нужна для определения, был ли найден хотя бы 1 поезд, т.к. обход производится "втупую", т.к. дерево сортировано не по имени станции
    if (temp){
        if (st == (temp->station)) //если найден подходящий поезд
        {
            f=1;
            unsigned long d,h,m,s,t,f;
            t=temp->time;s=t%60;t=(t-s)/60;m=t%60;t=(t-m)/60;h=t%24;d=(t-h)/24;
            cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << f<<endl << "Station:" << temp->station << endl << endl;
        }
        show_station(temp->right,st,f); //просмотр правого поддерева
        show_station(temp->left,st,f);    //просмотр левого поддерева
    }
}
int main(int argc, char* argv[])
{    //главная функция
    char k;        //временная переменная для чтения 1 символа для выбора пунктов меню
    bool f;        //переменная для использования с функцией поиска по имени станции
    char strtmp[80];    //временная переменная для чтения с клавиатуры
    traine *list=0;    //дерево, изначально являющееся пустым
    unsigned short d,h,m,s;    //переменные для разложения времени на дни, часы, минуты и секунды
    unsigned short number;    //временный номер
    char station[30];    //временная станция
    do{//главный цикл меню
    cout << "Enter your choice:\n[1] Add new record\n[2] View all records\n[3] View a specific train number\n[4] View all trains aimed to a specified station\n[0] Exit program\n";
    do{
    cin >> k;//ввод выбора (а далее всё понятно и так)
    if (k=='1'){
        do{
            cout << "Train number:\n";
            cin >> strtmp;
            number=atoi(strtmp);
        }while (!(number>0));
        do{
            cout << "Number of days:\n";
            cin >> strtmp;
            d=atoi(strtmp);
            cout << "Number of hours:\n";
            cin >> strtmp;
            h=atoi(strtmp);
            cout << "Number of minutes:\n";
            cin >> strtmp;
            m=atoi(strtmp);
            cout << "Number of seconds:\n";
            cin >> strtmp;
            s=atoi(strtmp);
        }while(d==0 && h==0 && m==0 && s==0);
        cout << "Station name:\n";
        cin >> station;
        list=add(list,number,s+m*60+h*3600+d*86400,station);
            
    }
    else if (k=='2'){
        if (list){
            show_all(list);}
        else {cout << "There is no trains\n";}}
    else if (k=='3'){
        cout << "Enter a train number:";
        do{
            cin >> strtmp;
            number=atoi(strtmp);
        }while (!(number>0));
        show_number(list,number);}
    else if (k=='4'){
        cout << "Enter a station name:";
        cin >>station;
        f=0;
        show_station(list,station,f);
        if (!f) {cout << "There is no trains\n";}
    }
    }while (!((k=='4')||(k=='3')||(k=='2')||(k=='1')||(k=='0')));
    }while (!(k=='0'));
    return 1;}
//---------------------------------------------------------------------------
Всем спасибо за помощь)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.06.2014, 02:38     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #7
Вот функция. f = 1(эта переменная передаётся параметром), потом объявляется ещё одна f: unsigned long d,h,m,s,t,f (неинициализирована), потом она выводится:
cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << f<<endl << "Station:" << temp->station << endl << endl;
Разберитесь с этими f.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void show_station(traine *temp, char st[50],bool &f){ //переменная f нужна для определения, был ли найден хотя бы 1 поезд, т.к. обход производится "втупую", т.к. дерево сортировано не по имени станции
    if (temp){
        if (st == (temp->station)) //если найден подходящий поезд
        {
            f=1;
            unsigned long d,h,m,s,t,f;
            t=temp->time;s=t%60;t=(t-s)/60;m=t%60;t=(t-m)/60;h=t%24;d=(t-h)/24;
            cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << f<<endl << "Station:" << temp->station << endl << endl;
        }
        show_station(temp->right,st,f); //просмотр правого поддерева
        show_station(temp->left,st,f);    //просмотр левого поддерева
    }
}
demigod324
4 / 2 / 0
Регистрация: 17.03.2013
Сообщений: 102
10.06.2014, 02:40  [ТС]     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #8
alsav22, думаете надо исправить это?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.06.2014, 02:41     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #9
Цитата Сообщение от demigod324 Посмотреть сообщение
думаете надо исправить это?
Что мне думать? Это вы думайте, что там у вас на консоль должно выводиться.
demigod324
4 / 2 / 0
Регистрация: 17.03.2013
Сообщений: 102
10.06.2014, 02:55  [ТС]     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #10
alsav22, не не, все нормально работает.

Добавлено через 11 минут
Ха, все же нашел косяк, при выборе 4:
C++
1
2
3
4
5
6
7
else if (k=='4'){
        cout << "Enter a station name:";
        cin >>station;
        f=0;
        show_station(list,station,f);
        if (!f) {cout << "There is no trains\n";}
    }
Не выводит ничего, кроме "There is no trains". Подскажите пожалуйста как можно исправить?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2014, 04:24     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero"
Еще ссылки по теме:

C++ При компиляции кода вылазит ошибка "error C2027: use of undefined type 'SldWorks'"
C++ Ошибка в Eclipse "Type Program "make" not found in PATH"
Ошибка: argument of type "char *" is incompatible with parameter of type "LPCWSTR" C++

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

Или воспользуйтесь поиском по форуму:
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
10.06.2014, 04:24     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero" #11
строка 59, вы сравниваете указатели, а не строки, используйте strcmp
C++
1
if (strcmp(st, temp->station) == 0)
Yandex
Объявления
10.06.2014, 04:24     Ошибка при компиляции "Size of the type 'char[]' is unknown or zero"
Ответ Создать тему
Опции темы

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