Dynamic_CASS неожиданно не удастсяC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Dynamic_CASS неожиданно не удастся

Сообщение Anonymous »

Я нахожусь на ESP32, и я использую ESP-IDF v5.1, который использует GCC. У меня есть что -то похожее на следующее (немного сложнее). RTTI включается ().

Код: Выделить всё

class Animal {
public:
void * p;
virtual ~Animal( void ){}
};
class Cat: public Animal {
public:
Cat( void ){
p = this;
//  p = dymamic_cast< void *>( this ); // also does not work
}
};
class SiameseCat: public Cat{};

int main( int argc, char *argv[] ){

SiameseCat *pSCat = new SiameseCat();
Cat *pCat = static_cast( pSCat->p );
SiameseCat *pElPussyCato = dynamic_cast< SiameseCat *>( pCat );
assert( pElPussyCato != NULL );  // fails
}
Я считаю, что это должно работать, но я вообще недоразумюсь, работаю за работу Dynamic_cast ? В моем реальном коде Dynamic_cast иногда может потерпеть неудачу, и я проверяю на наличие NULL там, но он всегда возвращается как NULL .

Я установил точки останова, а void * - то же значение, что и pscat , и то же самое, что и Pcat . (Как и следовало ожидать).

Я не использую общие библиотеки (не уверен, что вы даже можете сделать это на ESP32).

Я видел некоторые ошибки GCC, связанные с этим, поэтому я подумал, что упомяну об этом. У меня есть успешная работа TypeID в другом месте в моей программе, поэтому RTTI определенно там. Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/796 ... expectedly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»