Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Помогите найти ошибку


Автор: Zarg 17.4.2007, 18:14
Изучаю C++ по книге Самоучитель С++ Г.Шилд
застрял на классах, пиреписываю с книжки вот такой код

Код

#include <iostream>

using namespace std;
#define SIZE 10
class stack{
        char stck[SIZE];
        int tos;
public:
        void init ();
        void push (char ch);
        char pop ();
};

void stack::init ()
{
tos=0;
}

void stack::push (char ch)
{
if (tos==SIZE){
        cout << "Ctek polon";
        return;
}
char stack::pop ()
{
if (tos==0) {
        cout << "Stek pust";
        return 0;
        }
        tos--;
        return stck [tos];
}

int main ()
{
stack s1, s2;

int i;
s1.init ();
s2.init ();

s1.push ('a');
s2.push ('x');
s1.push ('b');
s2.push ('y');
s1.push ('c');
s2.push ('z');

for (i=0;i<3;i++) cout << "Simvol iz s1:" << s1.pop() << "\n";
for (i=0;i<3;i++) cout << "Simvol iz s2:" << s2.pop() << "\n";

return 0;
}



Компилирую во FreeBSD компилятором c++:

#c++ prog.c

в ответ получаю:
prog.c: In member function `void stack::push(char)':
prog.c:25: error: expected primary-expression before "char"
prog.c:25: error: expected `;' before "char"
prog.c:35: error: expected primary-expression before "int"
prog.c:35: error: expected `;' before "int"
prog.c:54: error: expected `}' at end of input

Подскажите новичку, что не нравится компилятору?

Автор: Daevaorn 17.4.2007, 18:18
Цитата(Zarg @  17.4.2007,  19:14 Найти цитируемый пост)
void stack::push (char ch){if (tos==SIZE){        cout << "Ctek polon";        return;}

не хватает }. О чем компилятор косвенно и говорит. Смотри внимательно

Автор: betal 19.4.2007, 21:59
Цитата(Daevaorn @  17.4.2007,  18:18 Найти цитируемый пост)
не хватает }. О чем компилятор косвенно и говорит. Смотри внимательно 
 smile 

Автор: SerpentVV 20.4.2007, 10:43
Цитата(Zarg @ 17.4.2007,  18:14)
Изучаю C++ по книге Самоучитель С++ Г.Шилд
застрял на классах, пиреписываю с книжки вот такой код

Код


void stack::push (char ch)
{
if (tos==SIZE){
        cout << "Ctek polon";
        return;
}



Подскажите новичку, что не нравится компилятору?

Не знаю, как компилятору, а мне не нравится, что нет ветки else ...
Как ты в стек-то кладешь передаваемый символ?

и не хватает закрывающей скобки

Автор: pmy 21.4.2007, 02:59
Код

#include <iostream>
using namespace std;

#define SIZE 10

class stack
{
        char stck[SIZE];
        int tos;
public:
        void init();
        void push(char ch);
        char pop();
};

void stack::init()
{
    tos=0;
}

void stack::push(char ch)
{
    if (tos==SIZE)
        cout << "Ctek polon";
    else
    {
        stck[tos]=ch;
        tos++;
    }
        
}

char stack::pop()
{
    if (tos==0)
    {
        cout << "Stek pust";
        return 0;
    }
    else
    {
        tos--;
        return stck[tos];
    }
}

int main ()
{
    stack s1, s2;

    int i;
    s1.init();
    s2.init();

    s1.push ('a');
    s2.push ('x');
    s1.push ('b');
    s2.push ('y');
    s1.push ('c');
    s2.push ('z');

    for (i=0; i<3; i++) 
        cout << "Simvol iz s1:" << s1.pop() << "\n";
    for (i=0;i<3;i++) 
        cout << "Simvol iz s2:" << s2.pop() << "\n";

return 0;
}

Автор: dzin 21.4.2007, 09:46
Тоже только начал изучать по Шилду.Возник вопрос почти сразу :пишу код по книге(тема:глобальные переменные)инициализирую переменную перед инт майн , а компилятор ругается типа undeclared.Подскажите что не так делаю .Имхо полный ламsmile  

Автор: Anikmar 21.4.2007, 10:49
Цитата(dzin @  21.4.2007,  09:46 Найти цитируемый пост)
Подскажите что не так делаю 

Запросто. Покажите как вы делаете и мы подскажем что не так!

Автор: Armenia 21.4.2007, 10:51

Код

#include <iostream>

using namespace std;
int i=8;
int main()
{
int i=7;
cout<<"Global(i)="<<::i<<" "<<"Local(i)="<<i<<endl;
    return 0;
}

вот  пример.
работает на сто.

Автор: Anikmar 21.4.2007, 10:53
Цитата(Armenia @  21.4.2007,  10:51 Найти цитируемый пост)
вот  пример.
работает на сто. 


Только неправильно.  smile 
У вас глобальная переменная перекрывается локальной.

Автор: Armenia 21.4.2007, 11:00
Цитата(Anikmar @ 21.4.2007,  10:53)
Цитата(Armenia @  21.4.2007,  10:51 Найти цитируемый пост)
вот  пример.
работает на сто. 


Только неправильно.  smile 
У вас глобальная переменная перекрывается локальной.

значит я вопрос не понял. smile
а что надо делать?

Автор: Anikmar 21.4.2007, 11:11
Цитата(Armenia @  21.4.2007,  11:00 Найти цитируемый пост)
значит я вопрос не понял. 
а что надо делать? 


Я сам не знаю что делать. Показать где ошибка в объявлении глобальной переменной. Жду кода от dzin.

Автор: dzin 21.4.2007, 11:36
#include<iostream>
int global;
void func1();
void func2();
int main(void)
{
global=100;
func1();
return 0;
}
void func1(void)
{
int temp;
temp=global;
func2();
printf("global is %d",global);
}
void func2(void)
{
int global;
for(global=0;global<10;global++)
putchar('.');
}

Автор: JackYF 21.4.2007, 11:44
dzin, пользуйся тегами выделения кода [code=cpp],пожалуйста. Кнопка Код сверху...

Автор: dzin 21.4.2007, 11:57
Сорри ,но в данный момент пишу с мобильного(мини опера)

Автор: Armenia 21.4.2007, 12:00
dzin 
все  работает (Visual Studio.NET)
вот результат "..........global is 100"
может с компилятором у вас проблемы smile

Автор: dzin 21.4.2007, 12:05
Цитата(Armenia @ 21.4.2007,  12:00)
dzin 
все  работает (Visual Studio.NET)
вот результат "..........global is 100"
может с компилятором у вас проблемы smile

Спасиб ,значит в компиляторе трабл.Будем скатьsmile

Автор: Anikmar 21.4.2007, 12:58
Цитата(dzin @  21.4.2007,  12:05 Найти цитируемый пост)
Спасиб ,значит в компиляторе трабл.Будем скать 

А какой компилятор? И как конкретно ругается?
Цитата(dzin @  21.4.2007,  11:36 Найти цитируемый пост)

void func2(void)
{
int global; 
for(global=0;global<10;global++)
putchar('.');

Это специально перекрытие сделано локальной - глобальной?

Автор: dzin 21.4.2007, 13:20
Цитата(Anikmar @ 21.4.2007,  12:58)
Цитата(dzin @  21.4.2007,  12:05 Найти цитируемый пост)
Спасиб ,значит в компиляторе трабл.Будем скать 

А какой компилятор? И как конкретно ругается?
Цитата(dzin @  21.4.2007,  11:36 Найти цитируемый пост)

void func2(void)
{
int global; 
for(global=0;global<10;global++)
putchar('.');

Это специально перекрытие сделано локальной - глобальной?

Платформа code::bloks(точно не помню GUI ...),да переменных две глоб и лок .
P.S. Спасиб за ответыsmile

Автор: dizzy1984 21.4.2007, 13:56
Цитата

Только неправильно.   
У вас глобальная переменная перекрывается локальной.

конечно, перекрывается, а что в этом плохого, ведь к глобальной всегда можно обратиться через :: ?

Автор: Xenon 21.4.2007, 14:13
Anikmar, а чего в этом страшного? В перекрытии? Я понимаю, что с идеологиской точки зрения так лучше не делать, но это должно работать smile

Автор: Anikmar 21.4.2007, 17:21
Цитата(Xenon @  21.4.2007,  14:13 Найти цитируемый пост)
Anikmar, а чего в этом страшного? В перекрытии? Я понимаю, что с идеологиской точки зрения так лучше не делать, но это должно работать  

Да нет, конечно все правильно. 
Я имел в виду неправильно с точки зрения ответа на вопрос в этой теме.
Был задан вопрос:
Цитата(dzin @  21.4.2007,  09:46 Найти цитируемый пост)
Тоже только начал изучать по Шилду.Возник вопрос почти сразу :пишу код по книге(тема:глобальные переменные)инициализирую переменную перед инт майн , а компилятор ругается типа undeclared.Подскажите что не так делаю .Имхо полный лам  


А приведенный пример никак не иллюстрировал работу с глобальной переменной.

А перекрывать - тут ничего страшного нет, конечно, но лично я один раз минут 40 искал у себя ошибку, когда глобальную переменную перекрыл.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)