Thread: adding an #include stops my program from compiling

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User
    Join Date
    Nov 2005
    Posts
    16

    adding an #include stops my program from compiling

    hi,

    I'm working on some assignment for school.
    Thanks to some previous help on this board I already finished the basics.
    Now I am writing the more complex stuff. I tried compiling what I wrote so far but I started getting a lot of errors from my compiler.
    when I tried commenting out all the new parts I saw that just by adding 1 #include statement I got those error messages.
    I really cant figure out what is happening.

    here is the crashing code:
    Code:
    #ifndef SCHEDULEITEM_H
    #define SCHEDULEITEM_H
    
    #include <iostream>
    #include <string>
    #include "schedule.h"
    
    typedef unsigned long int ulint;
    
    class ScheduleItem
    {   public:
            friend bool Schedule::check_item(ScheduleItem&, const ScheduleItem&, ScheduleItem&);
            ScheduleItem(ulint, ulint, std::string);
            ScheduleItem(std::istream&);
            ulint getbegin() const;
            ulint getend() const;
            std::string getdescription() const;
            ulint getlength() const;
        private:
            ulint begin_;
            ulint end_;
            std::string descr_;
    };
    
    std::ostream& operator<<(std::ostream&, const ScheduleItem&);
    
    bool operator<(const ScheduleItem&, const ScheduleItem&);
    bool operator>(const ScheduleItem&, const ScheduleItem&);
    bool operator==(const ScheduleItem&, const ScheduleItem&);
    
    #endif
    by commenting out the bold #include (and also the bold friend-function, because it needs stuff that gets included by the #include)
    everything works fine (well, fine meaning: program compiles)

    schedule.h also gets included from other files so I dont believe there is something wrong with that, but I'll show it below just to be sure.

    Code:
    // schedule.h
    
    #ifndef SCHEDULE_H
    #define SCHEDULE_H
    
    #include <iostream>
    #include <list>
    #include "scheduleitem.h"
    
    typedef unsigned long int ulint;
    
    class Schedule
    {   public:
            friend std::ostream& operator<<(std::ostream&, const Schedule&);
            Schedule();
            Schedule(std::istream&);
            bool insert_item(const ScheduleItem&);
            bool remove_item(const ScheduleItem&);
            bool check_item(ScheduleItem&, const ScheduleItem&, ScheduleItem&);
            bool check_item(ScheduleItem&, const ScheduleItem&, ScheduleItem&, const std::list<Schedule>&);
        private:
            std::list<ScheduleItem> items_;
    };
    
    #endif
    I'll also show you the Schedule::check_item code, but commenting this part out still gives the same error messages so I dont think it has anything to do with that (although there might be some mistakes in the code, but I havent been able to find that out yet because of these errors).

    Code:
    // part of schedule.cc
    
    bool Schedule::check_item(ScheduleItem& sibefore, const ScheduleItem& si, ScheduleItem& siafter)
    {   std::list<ScheduleItem>::iterator pos(findfreepos(items_, si));
        if (pos != 0)
            return 1;
        else
        {   sibefore.begin_ = si.getbegin();
            sibefore.end_ = si.getend();
            siafter.begin_ = si.getbegin();
            siafter.end_ = si.getend();
            for (std::list<ScheduleItem>::iterator i = items_.begin(); i != items_.end() || !(*i > sibefore); i++)
                if (!(*i < sibefore))
                {   sibefore.end_ = *i.getend() + sibefore.getlength();
                    sibefore.begin_ = *i.getbegin();
                }
            for (std::list<ScheduleItem>::iterator i = items_.end(); !(*i < siafter); --i)
            {   if (!(*i > siafter))
                {   siafter.begin_ = *i.getbegin() - siafter.getlength();
                    siafter.end_ = *i.getbegin()
                }
                if (*i == items_.begin())
                    break;
            }
            return 0;
        }
    }

    the errors I get are all like this:
    17 C:\Documents and Settings\ken\Desktop\struII\test\schedule.h expected `,' or `...' before '&' token
    17 C:\Documents and Settings\ken\Desktop\struII\test\schedule.h ISO C++ forbids declaration of `ScheduleItem' with no type

    etc...

    if anybody knows what is causing this his help would be much appreciated.

    EDIT:
    I will include some more code that might be useful.

    here is findfreepos, used in check_item
    Code:
    // findfreepos.cc
    
    #include <list>
    #include "scheduleitem.h"
    
    std::list<ScheduleItem>::iterator findfreepos(std::list<ScheduleItem>& lst, const ScheduleItem& x)
    {   for (std::list<ScheduleItem>::iterator i = lst.begin(); ; ++i)
        {   if (i == lst.end() || (*i > x))
                return i;
            else if (!(*i < x))
                return 0;
        }
    }
    and here is the mainfunction where I also include schedule.h
    Code:
    // main.cc
    
    #include <iostream>
    #include "scheduleitem.h"
    #include "schedule.h"
    
    int main()
    {   Schedule s;
        while(true)
        {   std::cout << "give begin, end and description:\n";
            ScheduleItem i(std::cin);
            if (i.getbegin() < 10)
                break;
            s.insert_item(i);
            std::cout << s;
        }
        while(true)
        {   std::cout << "give begin, end and description:\n";
            ScheduleItem i(std::cin);
            if (i.getbegin() < 10)
                break;
            s.remove_item(i);
            std::cout << s;
        }
        return 0;
    }
    I just noticed some other strange thing.
    if I change the order of includes in main.cc
    (just switching #include "scheduleitem.h" and #include "schedule.h")
    it gives totally different error messages.
    it just says:

    14 C:\Documents and Settings\ken\Desktop\struII\test\scheduleitem.h `Schedule' has not been declared


    thanks in advance,

    ken
    Last edited by angelscars; 11-11-2005 at 08:14 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Stray Error while compiling
    By Mankthetank19 in forum C Programming
    Replies: 6
    Last Post: 02-03-2011, 03:24 PM
  2. debug assertion failed!
    By chintugavali in forum C Programming
    Replies: 4
    Last Post: 12-11-2007, 06:23 AM
  3. MFC include BS
    By VirtualAce in forum Windows Programming
    Replies: 4
    Last Post: 10-31-2005, 12:44 PM
  4. Singleton problems
    By techrolla in forum C++ Programming
    Replies: 16
    Last Post: 01-02-2005, 04:05 PM
  5. help with finding lowest number entered
    By volk in forum C++ Programming
    Replies: 12
    Last Post: 03-22-2003, 01:21 PM