Проблема с С++.

компьютеры программирование с++

#define size 10
class stack {
char stck[size];
int tos;
public:
int init;
void puch(char ch);
char pop;
};
void stack::init()
{
tos=0;
}
void stack::puch(char ch)
{
if (tos==size)
{
cout<<"Стек полон./n";
}
stck[tos]=ch;
tos++;
}
char stack::pop()
{
if(tos==0)
{
cout<<"Стек пуст./n";
return 0;
}
tos--;
return(stck[tos]);
}
int main()
{
string s=0;
stack s1,s2;
char c;
s1,s2.init;
while (s!='exit')
{
cin>>s;
if (s=='push')
{
cin>>s;
if (s=='s1')
{
cin>>c;
s1.puch(c);
}
else
{
if (s=='s2')
{
cin>>c;
s2.puch(c);
}
else
{
cout<<"error/n";
}
}
}
else
{
if (s=='pop')
{
cin>>s;
if (s=='s1')
{
cin>>c;
s1.pop;
}
else
{
if (s=='s2')
{
cin>>c;
s2.pop;
}
else
{
cout<<"error/n";
}
}
}
else
{
cout>>"error/n";
}
}
}
}
охрененно веселая прога

Примечание:
27 ошибок, вот 2 из них:
c:\documents and settings\nikita\мои документы\visual studio 2008\projects\1\1\1.cpp(103) : error C2063: stack::init: не является функцией
c:\documents and settings\nikita\мои документы\visual studio 2008\projects\1\1\1.cpp(116) : error C2063: stack::pop: не является функцией
и если про про последние 25 понятно что из-за несоответствия строки и логического оператора !=(c:\documents and settings\nikita\мои документы\visual studio 2008\projects\1\1\1.cpp(131) : error C2784: bool std::operator !=(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *): не удалось вывести аргумент шаблон для "const _Elem *" из "int"
c:\program files\microsoft visual studio 9.0\vc\include\string(120): см. объявление 'std::operator !='), то про первые 2 вообще нифига не понятно
как решить первые 2 ошибки и как решить проблему несовместимости строки и !=
?

Примечание:
SKYDOS,
исправил
Малёк,
там должно быть так:
void init;
void pop;
исправил

Примечание:
Малёк,
почему он не признает их как функции?

Примечание:
Малёк,
ан нет, pop должна быть char.

Примечание:
теперь 26
c:\documents and settings\nikita\мои документы\visual studio 2008\projects\1\1\1.cpp(130) : error C3867: stack::init: в вызове функции отсутствует список аргументов; используйте "&stack::init" для создания указателя на член

Примечание:
Jesterok,
>Во-первых не "cout>>", а "cout<<"
исправил(знаю, глупо получилось)
>[по-моему вы в прошлый раз с теми же "тараканами" сюда пришли])
1)не люблю я когда ко мне на вы обращаются
2)после паскаля к этому синтаксису нужно привыкать
>Во-вторых "char stack::pop()" - забыл точку с запятой.
где?
>В-третьих литерал нужно заключать в ковычки (двойние): s!="exit".
сделал
>В-четвертых s1.pop() s2.pop().
сделал
>нахрена ты задаешь size макросом?
сам так хотел, но шилдт убедил меня в обратном

Примечание:
осталась одна ошибка:
c:\documents and settings\nikita\мои документы\visual studio 2008\projects\1\1\1.cpp(129) : error C3867: stack::init: в вызове функции отсутствует список аргументов; используйте "&stack::init" для создания указателя на член

Примечание:
>[по-моему вы в прошлый раз с теми же "тараканами" сюда пришли]).
http://otvety.google.ru/otvety/thread?tid=3455de3074d8ac54&table=%2Fotvety%2Fuser%3Fuserid%3D12744262648755209139%26tab%3Dwtmtoa
>скажи мне пожалуйста, нахрена ты задаешь size макросом? Ты же пишешь на C++ а не на C. Замени эту дрянь на "const int size = 10;".
http://otvety.google.ru/otvety/thread?tid=4cd658ebcd81cbfb&table=%2Fotvety%2Fuser%3Fuserid%3D12744262648755209139%26tab%3Dwtmtoa
http://otvety.google.ru/otvety/thread?tid=1bc9215290b4d5aa&table=%2Fotvety%2Fuser%3Fuserid%3D12744262648755209139%26tab%3Dwtmtoa

Примечание:
http://msdn.microsoft.com/en-us/library/b0x1aatf%28VS.80%29.aspx
как я понимаю читать нужно это
пока ошибку не понял

Примечание:
Jesterok,
а в моем клиническом случае ничего нельзя сделать.
Знаю что можно сделать проще, но оч хочется узнать почему мой вариант не работает.
Ответы:
Йопт, оно всё в колонку выстроено, как читать то.
Это что такое:
int init;
char pop;
Ты хоть прочитал текст ошибки? Он же русским языком пишет, в чём дело.
почему он не признает их как функции?
Потому что ты их описал как переменные! Скобочки где? (((((((((((
)))))))))))))
Во-первых не "cout>>", а "cout<<" (в конце листинга смотри [по-моему вы в прошлый раз с теми же "тараканами" сюда пришли]).
Во-вторых "char stack::pop()" - забыл точку с запятой.
В-третьих литерал нужно заключать в ковычки (двойние): s!="exit".
В-четвертых s1.pop() s2.pop().
Вот, что пока смог заметить.
Ну и такое, примечаньице: скажи мне пожалуйста, нахрена ты задаешь size макросом? Ты же пишешь на C++ а не на C. Замени эту дрянь на "const int size = 10;".
Упс :) второе замечание - неверное. Меня заклинило маленько и я не заметил, что тут объявление ф-ии :)) пардон.
По последней ошибке читай msdn [1].
И, что бы там не писал Шилдт (хотя я этого человека, как автора прекраснейших книг уважаю безмерно), все же лучше воздержаться от макросов. Страуструп, к примеру, даже такой, казалось бы безобидный макрос, как NULL, советует не использовать, а предпочитать ему обычный 0. И уж если есть такая необходимость в этом самом NULL, то заюзать так:
const int NULL = 0;
:)
У тебя init задана переменной, а ты обращаешься потом к ней, как к ф-ии. Да и вообще, я что-то не вижу, где у тебя конструктор с деструктором?
Убери init и ф-ю типа void ниже с темже именем и сделай конструктор с деструктором:
class stack {
char stck[size];
int tos;
stack (){ tos = 0; } //хотя нафиг так делать, можно просто выше переменной присвоить 0
~stack();
void puch(char ch);
char pop;
};
//...
Ну раз не хочешь делать, как я предложил, то попробуй вместо int init вписать void init().
Jesterok,
уже давно проставил void, всё равно та же ошибка.
какой ужОс, хоть одну книгу по c++ читали?
вот берите, пока бесплатно :)
правка: гугль "табы" не расставил.


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.