С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
bwkjs98s
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
1

Не понимаю причину ошибки "Statement missing ;"

26.04.2015, 19:10. Просмотров 836. Ответов 6
Метки нет (Все метки)

ИДЕ -- C++Builder 6

Суть кода:
Перевод инфикской записи в постфиксную. Стек работает, проблема в самой функции перевода PolConv. Я там не дописал действия в ветвлениях кода, но он ругается на саму структуру ветвления.

Выдаёт "Statement missing ;"
По видимому где-то потерял скобку или не закрыл контейнер. Однако я уже два часа смотрю на этот код, проверил каждую скобку, и в упор не вижу ошибки. Понимаю, просить других разбираться в такой рутине -- дело не благодарное, просто я уже задолбался, сил нет. Уже и на всякий случай булевы операнды во всех ифах позакрывал в скобки, всё равно ругается. Заранее большое спасибо!

Весь код:

Кликните здесь для просмотра всего текста

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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include <string>
#define FRT (*stk).first->value
//#include <QStringList>
TForm1 *Form1;
 
struct uzel{
uzel *ptr;
char *value;
};
 
class stack{
        public:
 
        uzel *first;
 
        /*bool CreateStack(char *x){
                first = new uzel;
                (*first).value = x;
                (*first).ptr = NULL;
                return 1;
        }*/
 
        bool Push(char *Val){
                if(first == NULL){
                        first = new uzel;
                        (*first).value = Val;
                        (*first).ptr = NULL;
                        return 1;
                }
                uzel *t;
                t = new uzel;
                if(t == NULL)
                        return 0;
                else{
                        (*t).value = Val;
                        (*t).ptr = first;
                        first = t;
                        return 1;
                }
        }
 
        char* Pop(bool del){
                if(first == NULL)
                        return NULL;
                else{
                if(del){
                        uzel *delptr = first;
                        char *c = (*first).value;
                        first = (*first).ptr;
                        delete delptr;
                        return c;
                }
                else{
                        return (*first).value;
                }
                }
        }
 
        int Count(){
                int i=1;
                uzel *u = first;
                while((*u).ptr != NULL){
                        i++;
                        u = (*u).ptr;
                }
                delete u;
                return i;
        }
 
        void Clear(){
                int i = Count(), j=0;
                while(j>i){
                        Pop(1);}
        }
};
 
bool isdigit(String s){
        int i = 1;
        bool b = true;
        while(i <= s.Length()){
                b = b && isdigit(s[i]);
                i++;}
        return b;
}
 
bool isdigit(char s[]){
        int i = 0;
        bool b = true;
        while(i < sizeof(s)){
                b = b && isdigit(s[i]);
                i++;}
        return b;
}
 
stack * Splitstring(String inf, char splitter, char end){
        stack *stk = new stack;
        int i = 1;
        while(inf[i] != end){
                std::string str = "";
                while(inf[i] != splitter){
                        str.append(1,inf[i]);
                        i++;
                }
                i++;
                char *c = new char[str.size()];
                /*for(int j = 0; j < str.size();j++){
                        c[j] = str[j];
                }*/
                stk -> Push(c);
        }
        return stk;
}
 
String PolConv(String inf_string){
 
        inf_string += " $";
        stack *inf = Splitstring(inf_string, ' ','$');
        stack *post = new stack, *stk = new stack; //
        int status = 2; // 0 -- ошибка; 1 -- усепшно; 2 -- в процессе
        int i = 0;
 
        while(status == 2){
                if(isdigit(FRT)){
                        (*post).Push((*inf).Pop(1));
                }
                if((FRT[0] == '+') || (FRT[0] == '-')){
                        if(((*inf).first == NULL) || (FRT[0] == '(')){
                                (*stk).Push((*inf).Pop(1));
                        }
                        else if((FRT[0] == '+') || (FRT[0] == '-') || (FRT[0] == '/') || (FRT[0] == '*')){
                                (*post).Push((*inf).Pop(1));
                        }
                        return inf_string;
                }
                else if((FRT[0] == '*') || (FRT[0] == '/')){
                        if(((*inf).first == NULL) || (FRT[0] == '(') || (FRT[0] == '-') || (FRT[0] == '+')){
 
                        }else if((FRT[0] == '*') || (FRT[0] == '/')){
 
                        }
                }
                else if(FRT[0] == '('){
                        (*stk).Push((*inf).Pop(1));
                }
                else if(FRT[0] == ')'){
                        if((*inf).first == NULL)
                                status=0;                                       
                        else if((FRT[0]=='+') || (FRT[0]=='-') || (FRT[0]=='*') || (FRT[0]=='/')){
                                (*post).Push((*inf).Pop(1));
                        }
                        else if(FRT[0]=='('){
                                (*stk).Pop(1);
                        }
                }
                else if(FRT[0] == '$'){
                        if((*inf).first == NULL){
                                status=1;                                    
                        }
                        else if((FRT[0]=='+') || (FRT[0]=='-') || (FRT[0]=='*') || (FRT[0]=='/')){
                                (*post).Push((*inf).Pop(1));
                        }
                        else if(FRT[0]=='('){
                                status=0;
                        }                                                       
                }else{
                        status 0;                                               
                }
        }
}
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


Часть кода, где вероятнее всего ошибка:
Кликните здесь для просмотра всего текста

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
#define FRT (*stk).first->value
 
String PolConv(String inf_string){
 
        inf_string += " $";
        stack *inf = Splitstring(inf_string, ' ','$');
        stack *post = new stack, *stk = new stack; //
        int status = 2; // 0 -- ошибка; 1 -- усепшно; 2 -- в процессе
        int i = 0;
 
        while(status == 2){
                if(isdigit(FRT)){
                        (*post).Push((*inf).Pop(1));
                }
                if((FRT[0] == '+') || (FRT[0] == '-')){
                        if(((*inf).first == NULL) || (FRT[0] == '(')){
                                (*stk).Push((*inf).Pop(1));
                        }
                        else if((FRT[0] == '+') || (FRT[0] == '-') || (FRT[0] == '/') || (FRT[0] == '*')){
                                (*post).Push((*inf).Pop(1));
                        }
                        return inf_string;
                }
                else if((FRT[0] == '*') || (FRT[0] == '/')){
                        if(((*inf).first == NULL) || (FRT[0] == '(') || (FRT[0] == '-') || (FRT[0] == '+')){
 
                        }else if((FRT[0] == '*') || (FRT[0] == '/')){
 
                        }
                }
                else if(FRT[0] == '('){
                        (*stk).Push((*inf).Pop(1));
                }
                else if(FRT[0] == ')'){
                        if((*inf).first == NULL)
                                status=0;                                       
                        else if((FRT[0]=='+') || (FRT[0]=='-') || (FRT[0]=='*') || (FRT[0]=='/')){
                                (*post).Push((*inf).Pop(1));
                        }
                        else if(FRT[0]=='('){
                                (*stk).Pop(1);
                        }
                }
                else if(FRT[0] == '$'){
                        if((*inf).first == NULL){
                                status=1;                                    
                        }
                        else if((FRT[0]=='+') || (FRT[0]=='-') || (FRT[0]=='*') || (FRT[0]=='/')){
                                (*post).Push((*inf).Pop(1));
                        }
                        else if(FRT[0]=='('){
                                status=0;
                        }                                                       
                }else{
                        status 0;                                               
                }
        }
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2015, 19:10
Ответы с готовыми решениями:

Что неправильно? Ошибка "statement missing"
//--------------------------------------------------------------------------- ...

Ошибка "Statement missing"
Пишет &quot;statement missing ;&quot; в 50 и 55 строке,хотя &quot;;&quot; там стоит. И еще &quot;illegal...

Найти причину ошибки "fatal error LNK1120: неразрешенных внешних элементов: 1"
Добрый день, код по условию задачи выбивает ошибку &quot; fatal error LNK1120:...

Ошибки Cannot convert и Statement missing. Как исправить?
Друзья, помогите, пожалуйста! Очень срочно нужно. В C++ очень недавно,...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить...

6
gazlan
3143 / 1920 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
26.04.2015, 19:19 2
Код
(  [28]:  123
)  [29]:  119
}  [7D]:  41
{  [7B]:  41
]  [5D]:  36
[  [5B]:  36

Не по теме:

Используя стиль K&R, вы обречены на поиск баланса скобок.

0
bwkjs98s
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
26.04.2015, 19:27  [ТС] 3
Извиняюсь за тупой вопрос, а что это?
Подсчёт скобок? Если так, то, да, у меня их не одинаковое число, т.к. я отлавливаю их как символы, '('. Если, конечно, это не учтено при подсчёте...
Код
(  [28]:  123
)  [29]:  119
}  [7D]:  41
{  [7B]:  41
]  [5D]:  36
[  [5B]:  36
Проверил, всё верно. Разница и должна быть в 4 скобки, если искать по запросу ')' и '('.
0
zer0mail
2454 / 2090 / 217
Регистрация: 03.07.2012
Сообщений: 7,583
Записей в блоге: 1
26.04.2015, 19:33 4
Цитата Сообщение от bwkjs98s Посмотреть сообщение
Выдаёт "Statement missing ;"
Выдает только это, без указания номера строки?
0
bwkjs98s
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
26.04.2015, 19:35  [ТС] 5
Строка 55 (второй спойлер)

status = 0;
0
Даценд
Модератор
Эксперт .NET
4295 / 4023 / 2663
Регистрация: 20.04.2015
Сообщений: 7,311
26.04.2015, 19:48 6
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

На втором спойлере
Цитата Сообщение от bwkjs98s Посмотреть сообщение
C++
1
status 0;
1
bwkjs98s
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 20
26.04.2015, 19:53  [ТС] 7
Дно. Просто дно... И продолжаю деградировать :Ъ
Спасибо большое! Извините, что потревожил такой мелочью.
0
26.04.2015, 19:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2015, 19:53

Ошибка "statement cannot resolve address of overloaded function"
помогите пожалуйста, почему вот тут вылезает ошибка &quot;statement cannot resolve...

Ошибка: "case label not within a switch statement"
Здравствуйте, работая с оператором switch произошла ошибка case label '1'...

Ошибки в примере:"newline in constant"и"unexpected end of file while looking for precompiled header directive"
здравствуйте. учусь по книге Шилдта там такой пример( да и везде впринципе...


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

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

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