Home > Software design >  How to contruct header file for class with struct define inside in C
How to contruct header file for class with struct define inside in C

Time:10-21

If I have class that contains a struct in it. How do I declare that struct inside of a header file?

See example below. Is this the correct syntax?

context: my professor has a IList.h file that we have to implement in a LinkedList class. That's why there's inheritance syntax in my examples.

LinkedList.cpp

#include "LinkedList.h"


class LinkedList : public IList {

      struct Node
   {
      int data;
      struct Node *next;
   }


};

LinkedList.h

#ifndef LINKED_LIST_
#define LINKED_LIST_

#include "IList.h"

class LinkedList: public IList
{
   protected:
      struct Node;


};

IList.h

//  Modified from code created by Frank M. Carrano and Timothy M. Henry.
//  Copyright (c) 2017 Pearson Education, Hoboken, New Jersey.

#ifndef I_LIST_
#define I_LIST_

class IList
{
public:
   /** Constructor */
   IList () : traverseCount(0) { }
    
   /** Destroys object and frees memory allocated by object.
    (See C   Interlude 2) */
   virtual ~IList () { }

   /** Gets the current number of entries in this list.
    @return The integer number of entries currently in the list. */
   virtual int getCurrentSize() const = 0;
   
   /** Sees whether this list is empty.
    @return True if the list is empty, or false if not. */
   virtual bool isEmpty() const = 0;
   
   /** Adds a new entry to this list.
    @post  If successful, newEntry is stored in the list and
       the count of items in the list has increased by 1.
    @param newEntry  The object to be added as a new entry.
    @return  True if addition was successful, or false if not. */
   virtual bool add(int newEntry) = 0;
   
   /** Removes one occurrence of a given entry from this list,
       if possible.
    @post  If successful, anEntry has been removed from the list
       and the count of items in the list has decreased by 1.
    @param anEntry  The entry to be removed.
    @return  True if removal was successful, or false if not. */
   virtual bool remove(int anEntry) = 0;
   
   /** Removes all entries from this list.
    @post  List contains no items, and the count of items is 0. */
   virtual void clear() = 0;
   
   /** Tests whether this list contains a given entry.
    @param anEntry  The entry to locate.
    @return  True if list contains anEntry, or false otherwise. */
   virtual bool contains(int anEntry) = 0;
    
   /** Get the count of number of nodes traversed.
    @return  The integer number of nodes traversed since last time the count was reset. */
    virtual int getTraverseCount() const { return traverseCount; }
     
   /** Reset the count of nodes traversed to zero. */
    virtual void resetTraverseCount() { traverseCount = 0; }
    
protected:
    int traverseCount;
}; // end IList

#endif

CodePudding user response:

You'll need to redeclare at least the pure-virtual methods from IList in your LinkedList class, otherwise LinkedList will be an abstract class and so the compiler won't allow you to instantiate a LinkedList object:

// LinkedList.h
#ifndef LINKED_LIST_
#define LINKED_LIST_

#include "IList.h"

class LinkedList: public IList
{
public:
   LinkedList();

   virtual ~LinkedList();

   virtual int getCurrentSize() const;

   virtual bool isEmpty() const;

   virtual bool add(int newEntry);

   virtual bool remove(int anEntry);

   virtual void clear();

   virtual bool contains(int anEntry);

private:
   struct Node
   {
      int data;
      struct Node *next;
   };

   struct Node *first;
};

#endif

... then you'll need to write the actual code for your methods inside LinkedList.cpp:

// LinkedList.cpp
#include "LinkList.h"

LinkedList :: LinkedList()
{
    [... code goes here...]
}

LinkedList :: ~LinkedList()
{
    [... code goes here...]
}

int LinkedList :: getCurrentSize() const
{
    [... code goes here...]
}

bool LinkedList :: isEmpty() const
{
    [... code goes here...]
}

bool LinkedList :: add(int newEntry)
{
    [... code goes here...]
}

bool LinkedList :: remove(int anEntry)
{
    [... code goes here...]
}

void LinkedList :: clear()
{
    [... code goes here...]
}

bool LinkedList :: contains(int anEntry)
{
    [... code goes here...]
}
  • Related