Я приведу традиционное предупреждение StackOverflow о том, что «вы, вероятно, на самом деле не хотите этого делать» - ручная манипуляция с указателями вообще не рекомендуется в современном C ++, и есть много плохих вещей, которые могут произойти междувыделение вашего объекта и передача строки, содержащей его адрес.При этом, вот ваша проблема:
& intruct, адрес intruct, является значением - вы не можете писать в него.Ваш текущий код по существу делает следующее:
{
stringstream ss;
string address = VectorCreator(filePath);
vector<intructor> intruct;
vector<intructor>* intructPtr = &intruct;
ss << address;
ss >> intructPtr; // intruct has not been changed
return intruct;
}
Поскольку ваша функция возвращает вектор (а не ссылку или указатель на вектор), кажется, что вы хотите создать копию существующего вектора.указал на.В этом случае вам нужно разделить его на два этапа:
{
stringstream ss;
string address = VectorCreator(filePath);
vector<intructor>* intructPtr;
ss << address;
ss >> intructPtr; // intructPtr now points to the resource from VectorCreator
return *intructPtr; // returns a copy of the resource from VectorCreator
}
Если вы не хотите делать копию, ваша функция должна вернуть ссылку vector<intructor>&
или указатель vector<intructor>*
- хотя все, что вы делаете, довольно опасно и может в конечном итоге ссылаться или указывать на неверное местоположение, сегментируя вашу программу.
Если вы не можете заставить VectorCreator возвращать умный указатель или сам вектор, будьте очень осторожны, чтобы вектор не удалялся или не увеличивался (что может привести к перераспределению) до того, как высделал копию.