Reputation: 11935
i have a question:
if i have:
void test (std::vector<int> *original)
{
myvector = vector<int>();
myvector.reserve(&original.size());
copy(original.begin(),original.end(),back_inserter(myvector));
}
I want to copy a vector in my original target vector
I have 3 error:
Error 1 error C2228: left of '.size' must have class/struct/union
Error 2 error C2228: left of '.begin' must have class/struct/union
Error 3 error C2228: left of '.end' must have class/struct/union
why???
Upvotes: 1
Views: 453
Reputation: 361312
Use:
//if you create a new vector object!
std::vector<int> myvector(original->begin(), original->end());
Or,
//if you want to populate an already created vector object!
myvector.clear(); //if you want to erase existing elements!
myvector.insert(myvector.end(), original->begin(), original->end());
Upvotes: 3
Reputation: 1077
There seems to be some confusion about pointers here. You have passed in a pointer, so should dereference it with -> not .
Upvotes: 0
Reputation: 206786
Note that original
is a pointer. You have to write it like this:
void test (std::vector<int> *original)
{
myvector = vector<int>();
myvector.reserve(original->size());
copy(original->begin(), original->end(), back_inserter(myvector));
}
Pointers are dereferenced with ->
, not with .
. &
means "take the address of".
Upvotes: 5
Reputation: 91270
original
is a pointer - use original->size()
original->begin()
original->end()
Also, myvector = vector<int>();
should preferably be replaced with myvector.clear();
Upvotes: 0
Reputation: 170489
Should be original->size()
, original->begin()
, original->end()
. original
is a raw pointer, you can't use .
on it, use ->
to get "member of the pointed-to object".
Upvotes: 1