views:

165

answers:

2

I have a struct:

struct OutputStore 
{
    int myINT;
    string mySTRING;
}

If I create an array of type OutputStore as follows:

OutputStore *OutputFileData = new OutputStore[100];

then I can address it with:

OutputFileData[5].myINT = 27;

But if I use a vector instead of an array:

vector<OutputStore> *OutputFileData = new vector<OutputStore>(100);

Then I get an '... is not a member of 'std::vector<_Ty>' error if I try:

OutputFileData[5].myINT = 27;

Since you can access a vector via it's index just as you can an array, why does this line not work. I'm just interested to know as it suggests I'm missing some fundamental bit of understanding.

(I changed to a vector as I wanted to push_back as I do not know the size that my data will reach. I've got it to work by using a constructor for the structure and pushing back via that...I just want to understand what is going on here)

+3  A: 

Because when you apply the [] operator on a pointer, it will index into that pointer, not that object. To get to the object you first need to dereference your vector pointer.

(*OutputFileData)[5].myINT = 27;
//*OutputFileData is the same as OutputFileData[0]

If you want to use the [] operator directly on the vector don't declare it as a pointer.

vector<OutputStore> OutputFileData(100);
OutputFileData[5].myINT = 27;

A vector is just a class like any other in C++. If you create a pointer to it, you are not working directly with the object until you dereference it.

Brian R. Bondy
+8  A: 

Don't create a pointer to a vector. Just do

vector<OutputStore> OutputFileData(100);

And you'll be fine. To make your code above work you'll need to do the following

(*OutputFileData)[5].myINT = 27;
Goz
Thanks very much, I understand now.
Columbo
PS. That's wrong. It's 'OutputFileData[5].myInt = 27;'
Martin York
erm ... im not sure you read this Martin ;)
Goz