如何将std :: vector <void *> *作为std :: vector <mystruct *> *传递给函数

时间:2018-09-21 14:25:42

标签: c++ stl

如何将std::vector<void*> *作为std::vector<MyStruct*>*传递给函数?

函数声明为void SetDataReferences(std::vector<MyStruct*>* pVector);

如果我以std::vector<void*> *的身份通过std::vector<MyStruct*>*,我将遇到错误

错误C2664:'CTagFilterComboBox :: SetDataReferences':无法将参数2从'std::vector<_Ty> *'转换为'std::vector<_Ty> *'

如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

不幸的是,List.removestd::vector<void*>的类型完全不同,因此没有强制转换。

您需要从头开始重建向量,并将指向该向量的指针传递给您的函数,并希望每个元素上的std::vector<MyStruct*>*有效。

给定static_cast的一种方式;

std::vector<void*>* foo

答案 1 :(得分:3)

如果不需要修改range(10),则可以通过将函数签名更改为:vector<void*> foo(请注意,void SetDataReferences(MyStruct*const* pVector, const size_t length)保持关联性)来处理基础数据。 ,因此这是指向MyStructs的常量指针。)可以这样调用:

const

如果需要修改SetDataReferences(reinterpret_cast<MyStruct*const*>(data(foo)), size(foo)) 的元素(而不是大小),您仍然可以将函数签名更改为:vector<void*> foo,可以这样进行:

void SetDataReferences(MyStruct** pVector, const size_t length)

Live Examples

如果您需要修改更复杂的SetDataReferences(reinterpret_cast<int**>(data(foo)), size(foo)) ,则需要接受vector<void*> foo,就像您的函数签名在问题中所做的那样,并在使用时而不是在组中强制转换元素。

答案 2 :(得分:0)

我从此链接获得了针对我的问题的解决方案 https://www.codeproject.com/Questions/1261243/How-to-pass-std-vector-void-as-std-vector-mystruct,它对我有用。

如果我调用SetDataReferences((std::vector<MyStruct*>*)(&p1)),它将为我工作,而不会出现任何编译器错误。