Vector 如何将向量作为参数传递给c++;从CLI/C++;包装纸?
我发现了类似的问题,但没有一个适合我的情况,所以我问自己的问题 我想使用一个库函数,它获取指向std::vector的指针,并用数据填充它 我已经设置了C++/CLI包装程序。 我正在尝试在包装器中实例化向量Vector 如何将向量作为参数传递给c++;从CLI/C++;包装纸?,vector,c++-cli,wrapper,unmanaged,mixed-mode,Vector,C++ Cli,Wrapper,Unmanaged,Mixed Mode,我发现了类似的问题,但没有一个适合我的情况,所以我问自己的问题 我想使用一个库函数,它获取指向std::vector的指针,并用数据填充它 我已经设置了C++/CLI包装程序。 我正在尝试在包装器中实例化向量 private: std::vector<int>* outputVector 我省略了其他参数,因为它们与本例无关。我已经可以使用该库的其他功能,它们可以正常工作。我就是无法将指针传递到std::vector 使用这样的代码,我得到错误消息: error C2664:
private:
std::vector<int>* outputVector
我省略了其他参数,因为它们与本例无关。我已经可以使用该库的其他功能,它们可以正常工作。我就是无法将指针传递到std::vector
使用这样的代码,我得到错误消息:
error C2664: 'TPSimpleRTree<CT,T>::GetInRegion' : cannot convert parameter 3 from 'cli::interior_ptr<Type>' to 'std::vector<_Ty> &'
错误C2664:'tpSimpleTree::GetInRegion':无法将参数3从'cli::interior_ptr'转换为'std::vector&'
我尝试删除“&”,因为我在C++中不太好,不知道如何正确使用指针。然后,错误变为:
error C2664: 'TPSimpleRTree<CT,T>::GetInRegion' : cannot convert parameter 3 from 'std::vector<_Ty> *' to 'std::vector<_Ty> &'
错误C2664:'tpSimpleTree::GetInRegion':无法将参数3从'std::vector*'转换为'std::vector&'
编辑:我已尝试将“&”替换为“*”,但不起作用,出现错误:
无法从“std::vector”转换为“std::vector&”
向量的C++函数签名为:
GetInRegion(..., std::vector<T*>& a_objects)
GetInRegion(…,std::vector&a_对象)
“std::vector*”到“std::vector&”
是不言自明的,您需要取消引用,而不是使用指针,因此:
m_pUnmanagedTPRTreeClass->GetInRegion(..., &outputVector)
使用:
编辑后,我看到您的getinregion签名是:
GetInRegion(..., std::vector<T*>& a_objects)
GetInRegion(…,std::vector&a_对象)
因此,它接受std::vector,其中T是指针,而您希望将int不是指针的std::vector传递给getinregion
“std::vector*”到“std::vector&”
是不言自明的,您需要取消引用,而不是使用指针,因此:
m_pUnmanagedTPRTreeClass->GetInRegion(..., &outputVector)
使用:
编辑后,我看到您的getinregion签名是:
GetInRegion(..., std::vector<T*>& a_objects)
GetInRegion(…,std::vector&a_对象)
因此,它接受std::vector,其中T是指针,而您希望向getinregion传递一个std::vector,其中int不是指针。给定签名:
GetInRegion(..., std::vector<T*>& a_objects)
GetInRegion(…,std::vector&a_对象)
你将调用(在C++或C++ +CLI)中:
std::vector v;
m_pUnmanagedTPRTreeClass->GetInRegion(…,v);
然后,您可以根据需要操作数据或将数据打包到.Net容器中。给定签名:
GetInRegion(..., std::vector<T*>& a_objects)
GetInRegion(…,std::vector&a_对象)
你将调用(在C++或C++ +CLI)中:
std::vector v;
m_pUnmanagedTPRTreeClass->GetInRegion(…,v);
然后,您可以根据需要操作数据或将数据打包到.Net容器中。您真的想传递指针的地址而不仅仅是指针吗?
GetInRegion
的签名是什么?请发布一个。您根本不需要new
向量,只需在函数调用中使用之前声明它,传递(非指针)向量的地址,然后在函数调用后将数据封送到.Net集合中……不要这样做GetInRegion
引用了T*
的向量,因此您将其全部向后。您真的想传递指针的地址而不仅仅是指针吗?GetInRegion
的签名是什么?请发布一个。您根本不需要new
向量,只需在函数调用中使用之前声明它,传递(非指针)向量的地址,然后在函数调用后将数据封送到.Net集合中……不要这样做GetInRegion
引用了T*
的向量,因此您已经将其全部反向。您好,很抱歉忽略了这一点,但我已经尝试了您的建议。我得到了相同的错误,除了它的“std::vector”到“std::vector&@Storm”看到我的编辑,我承认我不知道CLI在多大程度上可能会导致这里出现问题。您好,很抱歉忽略了这一点,但我已经尝试了您的建议。我得到了相同的错误,除了它的“std::vector”到“std::vector&@Storm”看到我的编辑,我承认我不知道CLI会在多大程度上导致这里的问题。非常感谢,它隐藏在库中的typedef下,我从未注意到它的含义。这就解决了!再次您好崩溃,我想给您发送一个PM,但我不知道如何将我的std::vector转换为托管C#可以使用的类型时遇到问题。我的问题来自部件,当我尝试使用列表^或数组时,它不允许我转换。您能给我一些指导吗?假设int*
只是指向int
的指针,请取消引用并保存int
?我对这个界面一无所知,所以不知道它是如何使用的。非常感谢你,这个界面隐藏在库中的typedef下,我从来没有注意到它的含义。这就解决了!再次您好崩溃,我想给您发送一个PM,但我不知道如何将我的std::vector转换为托管C#可以使用的类型时遇到问题。我的问题来自部件,当我尝试使用列表^或数组时,它不允许我转换。您能给我一些指导吗?假设int*
只是指向int
的指针,请取消引用并保存int
?我对这个界面一无所知,所以不知道它是如何使用的。
std::vector<int*> v;
m_pUnmanagedTPRTreeClass->GetInRegion(..., v);