Student needs assistance... (deperately)

Discussion in 'C++' started by sandy, Oct 9, 2006.

  1. sandy

    sandy Guest

    I am a student with an assignement due tomorrow. I am to write a sort
    of a memory manager, I don't want to go into all of the details (it's
    long).

    I have the following header file for my memory manager:
    <code>
    #ifndef MemManager_h
    #define MemManager_h

    #include <cstdlib>

    class MemManager
    {
    public:
    // Constructor
    //
    // Input : None
    // Purpose: To create an empty MemManager
    // Output : None

    MemManager ( );


    // Copy constructor
    //
    // Input : MemManager M
    // Purpose: To initialize MemManager to M
    // Output : None

    MemManager ( const MemManager & M );

    // Copy assignment
    //
    // Input : MemManager M
    // Purpose: To assign Rhs to current MemManager
    // Output : Current MemManager

    const MemManager & operator= ( const MemManager & M );


    // Destructor
    //
    // Input : None
    // Purpose: To free memory of MemManager
    // Output : None

    ~MemManager ( );


    // Clear
    //
    // Input : None
    // Purpose: To re-initialize MemManager to empty
    // Output : None

    void Clear ( );

    //
    // Input : None
    // Purpose: To delete the top element of MemManager
    // Output : 1 if successful; 0 otherwise
    // Notes: Only used to clear the linked list for this class

    int Pop ( );


    // Empty
    //
    // Input : None
    // Purpose: To check if MemManager is empty
    // Output : 1 if empty; 0 otherwise

    int Empty ( ) const;

    /*****************************************************
    Allocate

    Inputs: int Pages
    Output: int Starting Page

    Notes: Takes in the number of pages needed by a job
    Outputs the starting page for the job in memory
    returns -1 if there is not enough memory for the
    job.
    *********************************************************/
    int Allocate(int N);

    /*************************************************************
    GetNumPages

    Inputs: None
    Outputs: Pages

    Notes: Returns the number of pages in the current
    MemNode's block
    type.
    *************************************************************/
    int GetNumPages(MemNode & MN);

    /**************************************************************
    GetFirstPage

    Inputs: None
    Outputs: Page

    Notes: Returns the first available memory page from the
    current
    MemNode's blockType.

    ********************************************************************/
    //int GetFirstPage(MemNode & MN) const;



    private:

    typedef struct BlockType
    {
    int firstPage;
    int numberPages;

    //Constructor
    BlockType() : firstPage(0), numberPages(59)
    {}

    //I am not sure that I should ALLOW this since we are
    to be
    // limited to 60 pages... I left it in...
    BlockType(int f, int n) : firstPage(f), numberPages(n)
    {}

    }BlockType;

    struct MemNode
    {
    BlockType Element;
    MemNode *Next, *Previous;

    // StackNode constructors
    MemNode ( ) : Next ( NULL )
    {}
    MemNode ( const BlockType & E, MemNode *P = NULL ) :
    Element ( E ), Next ( P )
    { }
    };



    // Pointer to the top of Stack
    MemNode *Top;
    int NumNodes;

    };

    #endif

    </code>

    In the private section I have a typedef (I know this C not C++ but I
    cannot compile if I don't use the type def...)

    I have a typedef of 'BlockType'. I am supposed to keep this Private
    (requirement of the assignment) and I need to access the properties of
    the BlockType: firstPage and numberPages (meaning the first available
    page of memory and the number of pages available respectively.

    I declare the following function:
    int GetNumPages(MemNode & MN);

    I get the non-sensical error of: expected `;' before '(' token

    If I comment out the line the error goes away and it will compile. This
    tells me there are no semi-colons missing on the lines above. The error
    does not however point to any error that I can see to fix.

    I am down to the crunch and I am stumped.

    It would work fine (I think) if I moved the code into a seperate class
    but the prof has specified that he does not want us to do that.

    I however cannot figure out how to get access to those values. (Ant the
    error does not help since the compiler is obviously confused.)

    PLEASE HELP.

    Thanks.
     
    sandy, Oct 9, 2006
    #1
    1. Advertisements

  2. sandy

    Gavin Deane Guest

    I have trimmed out the comments fom your code to (hopefully) better
    illustrate the problem.
    This is your problem line.
    The compiler reads your code starting at the top and working towards
    the bottom. When it reaches your problem line

    int GetNumPages(MemNode & MN);

    it's going to have trouble knowing what that means if it doesn't know
    what MemNode is. And your definition of MemNode doesn't appear until
    later.

    Do you know about forward declarations? Alternatively, are you aware
    that the public, protectected and private parts of a class do not need
    to be declared in that order and that you can, for example, have a
    private section followed by a public section followed by another
    private section?

    You said you got the error
    expected `;' before '(' token

    I don't know what compiler you are using, but Comeau online does a
    better job of diagnosing the problem. It says
    error: identifier "MemNode" is undefined

    Sometimes compilers are like that. Making the intuitive link between
    what the compiler says and what is actually wrong can be a bit of an
    art.

    <snip>

    Gavin Deane
     
    Gavin Deane, Oct 9, 2006
    #2
    1. Advertisements

  3. sandy

    sandy Guest

    Thank you!

    I have now got a private section, public section, private section.

    I had no idea you could do that.

    I don't know what forward declarations are, but they are now my list of
    things to read about.

    Thanks again.

    FYI: It was recommended that I use Dev C++ by bloodshed so that is what
    I use. That way I can hand in the whole project with the assignment and
    they can either just run it, or complile it as they see fit.
     
    sandy, Oct 9, 2006
    #3
  4. sandy

    sandy Guest

    ****

    Sorry I spoke too soon.

    It compiled because in my debugging I had commented out the function.

    It didn't compile. I am still looking at the issue.
     
    sandy, Oct 9, 2006
    #4
  5. sandy

    sandy Guest

    Got it now.

    Thanks again.


     
    sandy, Oct 9, 2006
    #5
  6. sandy

    rexonf Guest

    Re-arrange your class, put the private section before the public
    section.
     
    rexonf, Oct 9, 2006
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.