Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vector 如何将向量作为参数传递给c++;从CLI/C++;包装纸?_Vector_C++ Cli_Wrapper_Unmanaged_Mixed Mode - Fatal编程技术网

Vector 如何将向量作为参数传递给c++;从CLI/C++;包装纸?

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:

我发现了类似的问题,但没有一个适合我的情况,所以我问自己的问题

我想使用一个库函数,它获取指向std::vector的指针,并用数据填充它

我已经设置了C++/CLI包装程序。 我正在尝试在包装器中实例化向量

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);