2016-12-08 112 views
-6

這是我的代碼如何將Int32 *轉換爲Int32?

int32 *iPos; 
status =scriptData.GetInt32(iPos); 
int32 position=iPos; 

但它發生error C2440: 'initializing' : cannot convert from 'int32 *' to 'int32'

如何轉換的Int32 *來的Int32?

+0

什麼像樣的C++的書/教程將告訴你怎麼樣。您取消引用該指針:'int position = * iPos;'。 –

+0

你試過'position = * iPos;'? – Amadeus

+0

轉換?你確定這就是你想要做的?我得到的印象是你不理解指針是幹什麼的....(或者以奇怪的方式使用「convert」這個詞)並且也可能錯誤地使用了'GetInt32'。 – Hurkyl

回答

2

只返回指針的地址取消對它的引用:

int32 position = *iPos; 

但更優雅的版本是使用&運算符來獲取指向position的指針:

int32 position; 
status = scriptData.GetInt32(&position); 
+0

謝謝:int32位置; status = scriptData.GetInt32(&position); –

0

也許你應該這樣做:

int32 position = *ipos; 

(*首次公開招股)返回指針的值,(&首次公開募股)

+0

感謝您的回覆。 –

0

顯然,你應該嘗試的Int32指針工廠像下一個:

class Int32Factory { 
public: 
    static Int32Factory *instance() { 
     static std::unique_ptr<Int32Factory> s_s(new Int32Factory()); 
     return s_s.get(); 
    } 

    ~Int32Factory() { 
     for (auto i : m_items) { 
      delete i; 
     } 
    } 

    int32 *getInt() { 
     m_items.push_back(new int32()); 
     return m_items.back(); 
    } 

private: 
    std::vector<int32 *> m_items; 

    Int32Factory() { } 
}; 

它使用簡單,只要做下面的步驟:

int32 *iPos = Int32Factory::instance()->getInt(); 
status = scriptData.GetInt32(iPos); 
+0

看起來有點像內存泄漏發生器。除非您想添加簿記功能來檢查所有最新成員是否已發佈,否則即使使用releaseInt()函數,也無法清除不再使用的成員。 – stefaanv

+0

我同意你的意見。我寧願創建shared_ptr或類似的東西,而不使用指針向量。 –

+0

這只是作爲新的(或make_shared/make_unique)的替代品而不是顯而易見的。 – stefaanv

相關問題