如何将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> *
'
如何解决这个问题?
答案 0 :(得分:4)
不幸的是,List.remove
与std::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)
如果您需要修改更复杂的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))
,它将为我工作,而不会出现任何编译器错误。