以下语句给我一个令我惊讶的编译器错误:
BaseClass& base;
if (((const AClass*) ptr = dynamic_cast<const AClass*> (&base)) != NULL)
{
...
}
GCC 4.1.2表示ptr未被定义为错误。然而,普通的定义和分配是有效的。如
if (const int* ptr = f())
那么是什么让它不能用于上面的代码段呢?
不,这不是另一个线程的重复,因为我已经指出简单的情况有效,但不是这种情况。如果你认为这是一个重复,你至少可以指出为什么上面那个不起作用。
答案 0 :(得分:1)
此
(const AClass*) ptr
是ptr
到const AClass*
类型的强制转换,而不是声明。如果您尚未宣布ptr
,那么您将收到您提到的错误。