steffi123 Ответов: 2

Как пройти СТД::вектор&ЛТ;недействительным*&ГТ; * как std::вектор&ЛТ;mystruct*&ГТ;* функции


Привет,

Как пройти СТД::вектор&ЛТ;недействительным*&ГТ; * как std::вектор&ЛТ;MyStruct*&ГТ;* функции?

Объявление функции void SetDataReferences(std::vector<MyStruct*>* pVector);

если я пройду СТД::вектор&ЛТ;недействительным*&ГТ; * как std::вектор&ЛТ;MyStruct*&ГТ;* Я получаю ниже ошибки

ошибка C2664: 'SetDataReferences' : не удается преобразовать параметр 2 из 'std::vector<_Ty> *' в 'std::vector<_Ty> *'

Как решить эту проблему?

Что я уже пробовал:

Я не знаю, какова альтернатива этому.

2 Ответов

Рейтинг:
19

CPallini

При условии, что вы уверены, что вектор, который вы передаете, действительно содержит указатель на valid MyStruct экземпляры, а оператора reinterpret_cast[^] сделает свое дело. Попробуйте, например:

#include <iostream>
#include <vector>
using namespace std;

struct Foo
{
  string s;
  int i;
};


void reportFooVector( vector <Foo*> * pvf )
{
  for (auto p : *pvf)
    cout << p->s << ", " << p->i << endl;
}


int main()
{
  Foo foo{ "foo",  5};
  Foo goo{ "goo", 10};

  vector <void *> vf { &foo, & goo};

  reportFooVector( reinterpret_cast< vector < Foo * > * >(&vf));
}


Рейтинг:
1

KarstenK

Альтернатива очень понятна: создание и передача параметра в правильном типе.

Вы должны принять это предупреждение очень серьезно, потому что это начинают кричать за дефект кодирования.

//TODO: Change the creation code of input parameter