2012-12-29 51 views
3

我試圖使用操作符投射到B *但它不起作用。爲什麼?謝謝。爲什麼我不能投向B *?

struct B; 

struct A { 
    A() = default; 

    operator (B *)() { 
     return new B(); 
    } 
}; 

struct B { B() = default; }; 

int main() { 

    A a; 

    B *b = a; 

} 

我得到的錯誤:cannot convert 'A' to 'B*' in initialization

+0

你究竟在用'operator(B *)()'來做什麼?我通常使用'operator B *()',你的語句甚至不會在我的工具鏈上編譯。您顯示的錯誤是我的輸出日誌中的* last *錯誤與您的代碼;而不是第一個(在你的運算符decl行中,「C++需要所有聲明的類型說明符」 – WhozCraig

+0

這可能是由於B的定義不完整。你不能創建一個'new' B ...只是猜測。 – StoryTeller

+2

你用什麼編譯器不會抱怨你的_real_錯誤? –

回答

8

有幾件事情你的代碼錯誤。首先,圍繞B*括號是錯誤的,只是做:

operator B*() {...} 

,它可能應該是一個const成員函數。

此外,您正試圖在B定義之前創建類型B的新實例。您不能使用不完整類型,只需在A之前定義B即可。

刪除這些錯誤後,您的代碼將按預期工作。

+0

那麼爲什麼這個編譯時使用括號並在稍後給出錯誤?編譯器將「(B *)」解釋爲什麼? – templatetypedef

+0

@templatetypedef:沒有線索,它的語法錯誤,我不知道同樣的問題,並詢問OP使用什麼編譯器... –

相關問題