2015-10-20 63 views
0

下面的语句给我的编译器错误作为一个惊喜,给我做这样的变量定义:为什么我不能在if条件

BaseClass& base; 

if (((const AClass*) ptr = dynamic_cast<const AClass*> (&base)) != NULL) 
{ 
    ... 
} 

GCC 4.1.2 PTR说没有定义为错误。然而,普通的定义和分配是可行的。如

if (const int* ptr = f()) 

那么是什么让它不能用于上述代码段呢?

不,这不是重复的其他线程,因为我指出了简单的情况下工作,但不是这种情况。如果你认为这是一个重复,你至少可以指出为什么上面那个不起作用。

+0

[在C++中声明和初始化条件或控制语句中的变量](http://stackoverflow.com/questions/1516919/declaring-and-initializing-a-variable-in-a-conditional- or-control-statement-in-c) – Rostislav

+1

也许你的意思是'if(const AClass * ptr = dynamic_cast (&base))' –

+0

@MM尝试了所有这些变体,但仍然是相同的错误。 –

回答

1

(const AClass*) ptr 

ptr强制转换为类型const AClass*,而不是一个声明。如果你还没有申报ptr,那么你会得到你提到的错误。

+1

如果你已经声明了'ptr',那么它仍然是一个错误,因为转换的结果是一个右值,不能被赋值。 –

+0

@ M.M好点。你的评论似乎是OP的含义。 – Adam

相关问题