Указатели на указатели
От: Idler Россия  
Дата: 14.09.06 07:04
Оценка:
void *p_global;        //У меня есть глобальный указатель 
p_global = 0;        //он не на что не указывает

class myclass{
public:
    void *p;    //Есть указатель внутри класса
    void getp(void *data){p = data;}
    void return_myself();
    }

myclass *abc = new(myclass);
abc->getp(&p_global);//думаю, здесь я получил указатель на указатель

//нужно, чтобы p_global указывал на abc
((myclass*)p_globall) == abc

void myclass::return_myself(){
    p = this; // - как это сделать внутри класса через p???
    }
Re: Указатели на указатели
От: Константин Л. Франция  
Дата: 14.09.06 08:10
Оценка:
Здравствуйте, Idler, Вы писали:

I>
I>void *p_global;        //У меня есть глобальный указатель 
I>p_global = 0;        //он не на что не указывает

I>class myclass{
I>public:
I>    void *p;    //Есть указатель внутри класса
I>    void getp(void *data){p = data;} //почему getp, судя по семантике надо setp 
I>    void return_myself();
I>    }

I>myclass *abc = new myclass(); //лучше так, без скобок в конце получишь default initialization. см. стандарт
abc->getp(&p_global);//думаю, здесь я получил указатель на указатель

I>//нужно, чтобы p_global указывал на abc
I>p_globall = abc; //можно без приведения типов

I>void myclass::return_myself(){
I>    p = this; // - как это сделать внутри класса через p??? //что ты хочешь сделать, объясни русским языком 
I>    }
I>


и почему C#-форматирвоание? есть же ccode?
Re[2]: Указатели на указатели
От: Idler Россия  
Дата: 14.09.06 08:56
Оценка:
Здравствуйте, Константин Л., Вы писали:


I>>    void getp(void *data){p = data;} //почему getp, судя по семантике надо setp 
С названиями я напутал

I>>myclass *abc = new myclass(); //лучше так, без скобок в конце получишь default initialization
здесь тоже, быстро писал

I>>[b]p_globall = abc; //можно без приведения типов
if(p_globall == abc) //нужно, чтобы p_global указывал на abc
        хорошо();


I>>void myclass::return_myself(){
I>>    p = this; // - как это сделать внутри класса через p??? //что ты хочешь сделать, объясни русским языком 

чтобы p_global указывал на abc

*p = this; //компилятор ругается Not allowed type
*p = (void *)this; //тоже
(void *)*p = (void *)this; //тоже
Re: Указатели на указатели
От: _Dreamer Россия  
Дата: 14.09.06 09:51
Оценка:
Здравствуйте, Idler, Вы писали:

I>
I>void *p_global;        //У меня есть глобальный указатель 
I>p_global = 0;        //он не на что не указывает

I>class myclass{
I>public:
I>    void **p;    //Есть указатель на указатель внутри класса
I>    void getp(void **data){p = data;}
I>    void return_myself();
I>    }

I>myclass *abc = new(myclass);
abc->>getp(&p_global);//думаю, здесь я получил указатель на указатель

I>//нужно, чтобы p_global указывал на abc
I>((myclass*)p_globall) == abc

I>void myclass::return_myself(){
I>    *p = this; // - как это сделать внутри класса через p???
I>    }
I>
Re: Указатели на указатели
От: Plague Россия 177230800
Дата: 14.09.06 12:32
Оценка:
я слабо понял, что ты имел ввиду, может так:

#include <iostream.h>

class myclass;

myclass *p_global = 0;        //У меня есть глобальный указатель, он не на что не указывает

class myclass
{
public:
    myclass **p;    //Есть указатель внутри класса

    void getp(myclass **data)
    {
        p = data;
    }

    void return_myself()
    {
        *p = this; // - как это сделать внутри класса через p??? 
    }

    void test(){std::cout<<"Test!"<<std::endl;}
};

int main()
{
    myclass *abc = new(myclass);
    abc->getp(&p_global);//думаю, здесь я получил указатель на указатель

    //нужно, чтобы p_global указывал на abc
    p_global = abc;

    // проверка :)
    p_global->p[0]->test();
    return 0;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Указатели на указатели
От: Idler Россия  
Дата: 15.09.06 03:28
Оценка:
Здравствуйте, _Dreamer, Вы писали:

Спасибо, все работает, но чтобы не переписывать все функции класса, т.к. 'р' используется в других местах можно зделать так

*((void**)p) = this;

всем спасибо за участие
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.