【发布时间】:2016-01-12 17:45:27
【问题描述】:
我发现了类似的问题,但没有一个适合我的情况,所以我问自己的问题。
我想使用一个库函数,它接受一个指向 std::vector 的指针,并用数据填充它。
我已经设置了 C++/CLI Wrapper。 我目前正在尝试在包装器中实例化向量,
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::vector<_ty>' 转换为 'std::vector<_ty> &'
向量的c++函数的签名是这样的:
GetInRegion(..., std::vector<T*>& a_objects)
【问题讨论】:
-
您真的是要传递指针的地址而不仅仅是指针吗?
GetInRegion的签名是什么?请发帖Minimal, Complete, Verifiable example。 -
您根本不需要
new向量,只需在函数调用中使用之前声明它,传递(非指针)向量的地址,然后将数据编组到.Net 函数调用后的集合。 -
...从头开始!
GetInRegion对T*中的vector进行引用,所以你已经把它全部倒过来了。
标签: vector c++-cli wrapper unmanaged mixed-mode