DevNull wrote:
I have a program where we load a mapfile, comprised of a .csv with
numbers which represent object types at a given position.
Each position is in the map is called a Cell, a cell contains only a
position struct with it's own x,y and an int called CellType which
determines if the Cell is a solid i.e. a wall, or a nonsolid, i.e.
empty space.
Given...
<code>
typedef std::vector<Cell* > CellList;
typedef std::vector<CellList* > Grid;
Grid RoomGrid;
</code>
Why does the following code not compile?
<code>
std::cout << "Showing Map: " << std::endl;
unsigned int x = 0;
while(x++ < RoomGrid.size())
{
unsigned int y = 0;
while(y++ != RoomGrid[x]->size())
{
std::cout << RoomGrid[x][y]->getType() << ",";
'RoomGrid[x]' is a _pointer to CellList_. Using indexing on it
does not give you 'Cell', it gives you a _reference to CellList_.
Apparently 'std::vector<Cell*>' does not have 'getType' member.
You need to dereference 'RoomGrid[x]':
... (*RoomGrid[x])[y]->getType() ...
}
std::cout << std::endl;
}
</code>
Specifically I'm getting this error
error: base operand of '->' has non-pointer type 'std::vector<Cell*,
std::allocator<Cell*> >'
If I change the line
<code>
std::cout << RoomGrid[x][y]->getType() << ",";
</code>
To read
<code>
std::cout << RoomGrid[x][y].getType() << ",";
</code>
I get an error of
error: 'class std::vector<Cell*, std::allocator<Cell*> >' has no
member named 'getType'
That isn't true though because Cell does have a member called getType,
and it looks to me like
RoomGrid[x][y] is returning the CellList object rather than the cell.
What am I missing here? How can this be fixed? I really need to make
sure that array notation works properly on the RoomGrid object even if
I need to redefine it.
See above
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask