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


Автор: ller 7.8.2009, 12:20
Реалезую класс небольшой.
вот фрагмент кода конструктора 
Код

Mesh::Mesh(int numX, int numY, double step)
{
    strMesh *head = 0;
    strMesh *temp = 0;


Если начать в отладчике пошагово его выполнять и попробовать просмотреть значение этих переменных то получаю сообщение 
Код

No symbol "head" in current context.


 smile 
Как это победить?

Автор: hente 7.8.2009, 12:27
strMesh эт что?

Автор: ller 7.8.2009, 12:30
Цитата(hente @  7.8.2009,  12:27 Найти цитируемый пост)
strMesh эт что? 


Код

class Mesh
{
private:
    struct strMesh
    {
        char Sticky;   // Флаг липкости, т.е. может ли эта частица двигаться
        //double Mass;   //Масса частицы, в принципе можно вынести вне, если она у всех одинаковая
        Vector3D Speed;// Скорость она и в африке скорость.
        Vector3D Pos[2]; // положение частицы. 2, чтоб не было "перекосов"
        Vector3D Strenght; // Внешняя сила, пока не будет использоватсья.
        strMesh *Link[4];
    };
    strMesh *pMesh;


но это не важно в данном случае
Код

int i,j;


Код

No symbol "j" in current context.

Автор: hente 7.8.2009, 13:12
т.е. я так понимаю у тя не работает следующая конструкция? :
Код


class A{
    public:
    A(); 
    private:
    int bla;
    }

A::A(){
     int B;
    }



дай полность класс и конструктор!!!

Автор: ller 7.8.2009, 13:26
Код работает. Тоько я не могу его отлидить.

вот пример
Код

class test
{
private:
    int t;
public:
    test(int T);
    ~test(){};
};

test::test(int T)
{
    int cur;
    cur = T;
    t=T;
    cout << "cur=" << cur << '\n';
}


cout выводит правильное значение. Но если точку останова поставить на cout и в отладчике посмотреть значение cur, то напишет что 
Код

No symbol "cur" in current context.

Хотя значение t,T показывает. Я вот к чему

Автор: hente 7.8.2009, 14:20
у меня вот это работает

Код

class test
{
private:
    int t;
public:
    test(int T);
    ~test(){};
};

test::test(int T)
{
    int cur;
    cur = T;
    t=T;
    //cout << "cur=" << cur << '\n';
    ShowMessage(cur);  //если тут ставить точку останова и проверять cur то тоже ==5!!!!!!!!!!!!!!!
}


void __fastcall TForm1::FormCreate(TObject *Sender)
{
   test a(5);

}




Код тестировал в builder'е
К стате ты чем компилишь?

Автор: andrew_121 7.8.2009, 14:39
Какой дебагер? Есть ли фронтенд?

Автор: ller 7.8.2009, 15:09
GDB
Ну соответственно любые фронтэнды.
в VisualStudio тоже все отоброжается, поэтому и запостил в этой ветке.

Добавлено через 5 минут и 22 секунды
Код

Breakpoint 7, test (this=0xbffff46c, T=1) at ../src/test.cpp:29
29        cur = T;
(gdb) n
30        t=T;
(gdb) n
31        cout << "cur=" << cur << '\n';
(gdb) p cur
No symbol "cur" in current context.
(gdb) p t
$5 = 1
(gdb) p T
$6 = 1
(gdb) 



Добавлено через 7 минут и 19 секунд
Может у меня GDB глючный?

Добавлено через 11 минут и 45 секунд
Потому что странное происходит....
Код

(gdb) p cur
No symbol "cur" in current context.
(gdb) p test
cur=1
Ошибка сегментирования


Автор: ller 7.8.2009, 16:35
Нашел
Bugzilla Bug 8246        cannot print local variables in (some) constructor functions
Ошибка GDB. Обидно.

Автор: nickless 7.8.2009, 18:19
ller, какая у тебя версия gdb?
У меня в 6.8 работает, правда если попытаться вызвать test() тоже падает (тут его его можно понять):
Код

(gdb) b test.cpp:17
Breakpoint 1 at 0x8048796: file test.cpp, line 17.
(gdb) r
Starting program: /tmp/gdb/test

Breakpoint 1, test (this=0xbf98f0d8, T=32) at test.cpp:18
18          cur = T;
(gdb) n
19          t=T;
(gdb) n
20          cout << "cur=" << cur << '\n';
(gdb) p cur
$1 = 32
(gdb) p cur
$2 = 32
(gdb) p cur
$3 = 32
(gdb) p test
zsh: segmentation fault  gdb ./test


Добавлено через 2 минуты и 47 секунд
ЗЫ
Компилировал gcc 4.3.3 под линуксом: 
Код

g++ -g test.cpp -o test

Автор: ller 7.8.2009, 18:45
Код

 gdb --version
GNU gdb Fedora (6.8-32.fc10)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu".



Добавлено через 1 минуту
Код

 gcc --version
gcc (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7)
Copyright (C) 2008 Free Software Foundation, Inc.


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