2011-12-13 100 views
0
MemoryManager openMemory() { 
    if (...) { 
    return memory_manager_instance; 
    } 
    else 
    return NULL; 
} 

MemoryManager是用戶定義的C++類的名稱。上面的函數定義給了我標題中的錯誤。無法將'0l'從'long int'轉換爲'MemoryManager'

基本上我不想在條件不成立時返回實例。這樣的函數定義是有效的,我通常在Java中做,但它似乎不適用於C++。我該怎麼做才能解決這個問題?

+1

Java只有指針,這就是爲什麼你可以返回NULL對象。在C++中,您的代碼需要MemoryManager中的轉換構造函數,它不存在或者是顯式的。你可能意思是返回一個指針而不是一個值。也可能需要拋出異常或返回一個默認的初始化對象 - 無法從您的問題中得知。 – 2011-12-13 18:53:32

回答

6

讓你的函數返回一個MemoryManager *(也許使用C++庫中或boost中的幾個智能指針類之一)。如果MemoryManager是一個類的名字,那麼寫這個函數會返回一個memory_manager_instance的副本。這與Java不同,其中MemoryManager類型的變量將作爲對象的引用。

編輯:此外,它看起來像你試圖實現一個單身人士。您希望爲MemoryManager設置私有或受保護的默認構造函數,複製構造函數和賦值運算符。前兩個也是用Java編寫的,但不是最後一個!