我發現了類似的問題,但沒有爲我的情況工作,所以我問自己的問題。如何將一個向量作爲參數從CLI/C++ Wrapper傳遞給一個C++庫?
我想使用一個庫函數,它需要一個指向std :: vector的指針,並用數據填充它。
我已經有一個C++/CLI包裝器設置。 目前我正在試圖實例化載體在包裝,
private:
std::vector<int>* outputVector
,並在構造函數中,我實例吧:
outputVector = new std::vector<int>();
現在,在調用C的包裝方法++庫函數:
m_pUnmanagedTPRTreeClass->GetInRegion(..., &outputVector)
我省略了其他參數,因爲它們對於這種情況不重要。我已經可以使用圖書館的其他功能,而且他們的工作沒有問題。我只是無法設法將指針傳遞給std :: vector。
通過這樣的代碼,我得到錯誤信息:
error C2664: 'TPSimpleRTree<CT,T>::GetInRegion' : cannot convert parameter 3 from 'cli::interior_ptr<Type>' to 'std::vector<_Ty> &'
我曾試圖消除「&」,因爲我不是位於C++很大和很不清楚如何正確使用指針。然後,誤差爲:
error C2664: 'TPSimpleRTree<CT,T>::GetInRegion' : cannot convert parameter 3 from 'std::vector<_Ty> *' to 'std::vector<_Ty> &'
編輯:我曾嘗試用 「*」,這是行不通的更換 「&」,我得到的錯誤:
無法從「STD轉換::矢量< _Ty>」到 '的std ::矢量< _Ty> &'
爲載體中的C++函數的簽名是這樣:
GetInRegion(..., std::vector<T*>& a_objects)
你真的想要傳遞指針的地址而不是指針嗎? 'GetInRegion'的簽名是什麼?請發佈[最小,完整,可驗證示例](https://stackoverflow.com/help/mcve)。 – robert
你根本不需要'新'矢量,只需在函數調用中聲明它就可以了,傳遞(非指針)向量的地址,然後在函數調用後將數據編組到一個.Net集合中。 – crashmstr
...從頭開始! 'GetInRegion'將一個*引用*引用到'T *'的'vector',所以你已經把它全部倒退了。 – crashmstr