Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Visual C++
Перезагрузить страницу Просмотр значения переменной top в С++
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
zim zim вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.10.2005
По умолчанию Просмотр значения переменной top в С++ - 15.09.2007, 21:54

(Использую Microsoft Visual C++ 6.0)
После кода дано пояснение проблемы.
Код:
#ifndef TSTACK1_H
 #define TSTACK1_H
 
 template< class T >
 class Stack {
     public:
         Stack( int = 10 );    // конструктор умолчания
         ~Stack() { delete [] stackPtr; }
         bool push( const T & );
         bool pop( T & );
     private:
         int size;    // число элементов в стеке
         int top;    // вершина стека
         T *stackPtr;    // указатель на стек
 
         // функции-утилиты
         bool isEmpty() const { return top == -1; }
         bool isFull() const { return top == size - 1; }
 };
 
 #endif
Если отлаживать программу и добраться до этой строчки:
Код:
bool isFull() const { return top == size - 1; }
то невозможно ( у меня не получается ) посмотреть значение переменной top. Если же переписать этот код так:
Код:
bool isFull() const 
 { 
   return top == size - 1; 
 }
то дебаггер успешно заходит внутрь блока и показывает значение переменной top
У меня вопрос: можно ли используя первую форму записи кода просмотреть значение переменной top?
Ответить с цитированием
  (#2 (permalink)) Старый
zevun zevun вне форума
Member
 
Сообщений: 551
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.08.2007
По умолчанию 16.09.2007, 04:36

Нет, нельзя. Но если очень нужно, то можно открыть окно дисассемблера и делать Step Over (F10) до тех пор, пока в окне Variables не появятся переменные.
Ответить с цитированием
  (#3 (permalink)) Старый
zim zim вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.10.2005
По умолчанию 16.09.2007, 11:35

Ясно. Спасибо за ответ. Единственный способ, которым всё-таки можно посмотреть значение переменной, это уже во время отладки привести код вида 1 к виду 2
Ответить с цитированием
  (#4 (permalink)) Старый
IL_Agent IL_Agent вне форума
Member
 
Аватар для IL_Agent
 
Сообщений: 2,015
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.07.2005
По умолчанию 17.09.2007, 09:09

Цитата:
это уже во время отладки привести код вида 1 к виду 2
А почему бы сразу не пписать в "виде 2" ? Чего строки жалеть ?
Ответить с цитированием
  (#5 (permalink)) Старый
zim zim вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.10.2005
По умолчанию 17.09.2007, 10:17

мне кажется, что "вид 1" красивей
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
D_K D_K вне форума
Member
 
Сообщений: 1,681
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.11.2005
По умолчанию 17.09.2007, 11:32

А Watch'ами религиозные убеждения пользоваться не позволяют?


импортирован с progz.ru
Ответить с цитированием
  (#7 (permalink)) Старый
IL_Agent IL_Agent вне форума
Member
 
Аватар для IL_Agent
 
Сообщений: 2,015
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.07.2005
По умолчанию 18.09.2007, 01:35

Цитата:
мне кажется, что "вид 1" красивей
ну ну
Ответить с цитированием
  (#8 (permalink)) Старый
zim zim вне форума
Member
 
Сообщений: 28
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.10.2005
По умолчанию 18.09.2007, 10:14

Привожу полный исходный код программы. Поставьте бряк на строчке, обозначенной в комментариях как XXX и попробуйте посмотреть значение переменной top. У меня не получается...
tstack1.h

Код:
// tstack1.h
 // шаблон класса Stack
 #ifndef TSTACK1_H
 #define TSTACK1_H
 
 template< class T >
 class Stack {
     public:
         Stack( int = 10 );    // конструктор умолчания
         ~Stack() { delete [] stackPtr; }
         bool push( const T & );
         bool pop( T & );
     private:
         int size;    // число элементов в стеке
         int top;    // вершина стека
         T *stackPtr;    // указатель на стек
 
         // функции-утилиты
         bool isEmpty() const { return top == -1; } // XXX
         bool isFull() const { return top == size - 1; }
 };
 
 template< class T >
 Stack< T >::Stack( int s )
 {
     size = s > 0 ? s : 10;
     top = -1;    // сначала стек пуст
     stackPtr = new T[ size ];
 }
 
 // поместить элемент в стек;
 // возвратить 1 в случае успеха, иначе - 0
 template< class T >
 bool Stack< T >::push( const T &pushValue )
 {
     if ( !isFull() )
     {
         stackPtr[ ++top ] = pushValue;
         return true; // удача
     }
     return false; // неудача
 }
 
 // извлечь элемент из стека
 template< class T >
 bool Stack< T >::pop( T &popValue )
 {
     if ( !isEmpty() )
     {
         popValue = stackPtr[ top-- ];
         return true;    // успех
     }
     return false;    // неудача
 }
 
 #endif
main.cpp
Код:
// Тестирование шаблонного класса Stack.
 // Функция main использует шаблонную функцию
 // для манипулирования объектами типа Stack< T >
 #include "iostream.h"
 #include "tstack1.h"
 
 // Шаблонная функция
 template< class T >
 void testStack( Stack< T > &theStack,    // ссылка на Stack< T >
                T value,    // начальное значение для стека
                T increment,    // инкремент для последовательных значений
                const char *stackName ) // имя Stack < T >-объекта
 {
     cout << "\nPomeshenie elementov v " << stackName << '\n';
 
     while ( theStack.push( value ) )
     {
         cout << value << ' ';
         value += increment;
     }
 
     cout << "\nStack zapolnen. Nevozmozhno pomestit' " << value
          << "\nIzvlechenie elementov iz " << stackName << '\n';
 
     while ( theStack.pop( value ) )
         cout << value << ' ';
 
     cout << "\nStack pust. Nevozmozhno izvlech\n";
 }
 
 int main()
 {
     Stack< double > doubleStack( 5 );
     Stack< int > intStack;
 
     testStack( doubleStack, 1.1, 1.1, "doubleStack" );
     testStack( intStack, 1, 1, "intStack" );
 
     return 0;
 }
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача значения переменной из цикла. Shell Блондико Общие вопросы программирования 1 11.03.2010 22:49
Вычисление значения переменной Sasyk PHP 15 24.05.2007 20:51
передача значения переменной через страницы digitest PHP 6 19.04.2007 18:10
Передача переменной с заменой значения в XHTML =kolya= Вопросы начинающих программистов 4 14.12.2005 01:51
Просмотр DLL библиотеки @cadrules@ Железо. Написание драйверов 2 25.11.2005 10:47
возвращение значения переменной coo13r Prolog 3 17.01.2005 17:11
Вывод значения переменной в динамическом поле aqua Flash и ActionScript 2 28.11.2004 17:22
Способы получения значения переменной из другого класса valentas Вопросы начинающих программистов 7 25.10.2004 20:54
Просмотр папок Monah IRH PHP 37 09.07.2004 13:56
Необходимо получить имя переменной в зависимости от значения feedbee Delphi 4 01.03.2004 15:25
Передача значения одной переменной из VC в программу написанную на C++Builder Anonymous C++ Builder 0 14.01.2004 12:58
Присвоение значения переменной типа String Anonymous Вопросы начинающих программистов 3 26.05.2003 17:42



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов