views:

58

answers:

3

I'm battling with this assignment :)

I've got two classes: Ocean and Grid.

When I declare an object of the Grid inside the Ocean:

unsigned int sharkCount;
Grid grid;

The compiler/complainer says:

error C2146: syntax error : missing ';' before identifier 'grid'


Can you possibly predict what produces this error with the limited info I provided?

It seems that as if the Ocean doesn't like the Grid class. Could this be because of the poor implementation of the grid class. BTW the Grid has a default constructor.

Yet the error happens in compiling time!.

EDIT: They're each in separate header file, and I've included the Grid.h in the Ocean.h.

+2  A: 

My first guess would be that the definition of Grid simply isn't visible at the point that you've tried to use it in Ocean. Typically this happens if you have each in its own file, and haven't used a header to allow each to be "seen" by the other.

Jerry Coffin
I clarified that in my post, I did include the definition of Grid the The Ocean. Thanks
m4design
+2  A: 

We need the rest of the source, but there are a couple of possible answers:

  • Grid is being overloaded by something via a macro (#define)
  • the Grid class definition isn't being included.
Charlie Martin
+1  A: 

In order for Grid to be used in your other class you either need to include the header of the Grid in the header or do a forward declaration of the class and declare it as a pointer in your class then instantiate it in your .cpp file.

class Grid;

class Ocean {
   Grid* grid;
};

or preferably :

class Ocean {
    boost::shared_ptr<Grid> grid;
};
Anders K.
I think it should be `boost::` not `boost:`
Delan Azabani
oops, yes. edited, thanks
Anders K.