| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > вызов методов класса |
| Автор: lemuriaIATE 3.11.2007, 11:56 | ||||||
добрый день! помогите, пожалуйста найти ошибку. есть класс для работы с динамическим списком, методы написаны вроде бы правильно (если не трудно, посмотрите и их), но при вызове из главной программы они не выполняются - при выборе любого варианта окно закрывается.
|
| Автор: Tipok 3.11.2007, 13:06 |
| lemuriaIATE, окно у тебя закрывается потому, что в switch..case надо убрать апострофы у цифр. Ну а в остальном... |
| Автор: lemuriaIATE 3.11.2007, 13:23 |
| работает (точнее не работает) одинаково что с апострофами, что без них( |
| Автор: Tipok 3.11.2007, 13:25 |
| lemuriaIATE, без апострофов по крайней мере методы вызываются. Тока вот работают они не правильно |
| Автор: lemuriaIATE 3.11.2007, 14:17 |
| а что нужно исправить? или там вообще все неправильно?? сижу уже над этим не знаю сколько... |
| Автор: Tipok 3.11.2007, 14:41 | ||
Там еще putch() замени на cin >> choise. Но методы от этого не заработают |
| Автор: lemuriaIATE 3.11.2007, 15:04 |
| так а что надо исправить, чтобы они заработали?? для того, чтобы использовать cin нужно подключить iostream.h, в моем компиляторе это нельзя сделать, приходится использовать putch. чем плоха эта функция? |
| Автор: Fokspro 3.11.2007, 15:10 |
| 1. Зачем ты пишешь using namespace std; если ты им не пользуешься! 2. Функция putch(choise) - печатает на экран переменную choise, нужно использовать: choise=getch(); а затем для ее вывода putch(choise); Либо уж пользуйся библиотекой std: std::cin>>k; Тогда и сама цифра отобразится и переменная примет значение. Но тогда в кейзах нужно не символы '1', '2' и т.д. писать а именно цифры 1, 2, 3, 4, 5, 6. 3. Переменная choise - лишняя достаточно сделать так: k=0; while(k) { ... k = getch(); switch(k) { case '1': ... break; case '2': ... break; ... default: k = 0; break; } } 4. Нельзя вызывать методы класса без самого объекта!!! (по поводу case '1': Stek(); ...) более это конструтор (да и деструтор тоже). Конструтор уже вызвался, потому как программа запущена у тебя и объявлен экземпляр класса Stek u. А вот когда прога отработает, то и деструтор вызовется автоматически при удалении экзепляра класса (u). Здесь два варианта: (1) Объявлять Stek * u; а в кейзах делать u = new Stek; и delete u; вот это более правильно. (2) Засунуть инициализацию не в контрутор, а скажем, в метод void Stek::Init() и его вызвать при нажатии единицы, т.е. case '1': u.Init(); Тоже самое с деструтором. Это по общей организации программы. Дальше напишу другие косяки. |
| Автор: bsa 3.11.2007, 23:06 | ||||||
iostream.h - это устарело. Вместо него надо подключать iostream:
|