с запятой после того, если заявления являются проблемой
BAD:
if(st.size()>0); // <-- this should not be here!!!!!!!!
cout<<st.size();
Правильно переписано:
if(st.size()>0) {
cout<<st.size();
}
Кроме того, как @WhozCraig указал, другой оператор тоже имеет точку с запятой!
BAD:
if(!st.empty()); // <--BAD!
//do stuff
Хорошо:
if(!st.empty()) {
//do stuff
}
ВСЕГДА !! используйте скобки с ветвями (если, переключатель) и петлями (для, пока, делать-пока) !!! Это окупает большое время! (Не говоря уже, милый котенок умирает каждый раз, когда такой блок записывается без скобок!) ВСЕГДА !!
Например, это может убить день в отладке:
BAD:
int i=0;
...
while(i++<1000);
doStuff(i);
Хорошо:
int i=0;
...
while(i++<1000) {
doStuff(i);
}
Остерегайтесь (как @WhozCraig указал снова) это не автомагически решить проблему с запятой прекращается ветви и петли заявления, так как это вполне допустимо синтаксис:
if (condition);{ ...code... }
Или
if (condition);
{
...code...
}
Но на мой взгляд и опыт (это полностью субъективная!) - поскольку я сам попал в эту ловушку пару раз - я испытал это, когда у меня появилась фигурная скобка после вышеупомянутых утверждений, я никогда не делал ошибку, набрав точку с запятой снова. Присоединение к этому соглашению было серебряной пулей - для меня, и другие могли воспользоваться этим. Кроме того, если бы там была точка с запятой, это бы сразу привлекло мое внимание, просто посмотрев, поскольку это «необычный образец символов» .
«Моя программа» ... какая у вас программа? Как мы должны рассказывать, что происходит, если мы не увидим этого? – Mehrdad