Всем привет ! Сильно не ругайте, к вечеру плохо соображаю. Поиск результатов не дал.
Пример:
class A
{
public:
int i;
operator int () { return i; };
operator int* () { return &i; };
};
A a;
A *pA=new A();
int i;
int *pi;
i=a; // работает
pi=a; // работает
pi=*pA; // работает
pi=pA; // НЕ РАБОТАЕТ
Мне нужно именно последний вариант. Где я не прав и как меня вылечить ?
Здравствуйте, Всеволод, Вы писали:
В>pi=pA; // НЕ РАБОТАЕТ
Справа стоит встроенный тип — указатель на A. Никакие определенные пользователем преобразования не рассматриваются.
Тебя же наверняка не удивляет вот это:
int i;
double d;
i = d;//Ok
int* pi;
double* pd;
pi = pd;//error
Здравствуйте, Всеволод, Вы писали:
В>Всем привет ! Сильно не ругайте, к вечеру плохо соображаю. Поиск результатов не дал.
В>i=a; // работает
В>pi=a; // работает
В>pi=*pA; // работает
В>pi=pA; // НЕ РАБОТАЕТ
В>[/ccode]
В>Мне нужно именно последний вариант. Где я не прав и как меня вылечить ?
ИМХО, только
pi=reinterpret_cast<int*>(pA);
Преобразование из A* в int* нельзя определить никак
Или, как вариант, можно обернуть A в умный указатель, который будет поддерживать все нужные тебе преобразования.
... << RSDN@Home 1.1.4 stable SR1 rev. 568 with Кирпичи — В Огонь!>>
Здравствуйте, Всеволод, Вы писали:
В>i=a; // работает
В>pi=a; // работает
В>pi=*pA; // работает
В>pi=pA; // НЕ РАБОТАЕТ
В>[/ccode]
В>Мне нужно именно последний вариант. Где я не прав и как меня вылечить ?
Так годится?
pi = (*pA);