2015-10-20 64 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

相關問題