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:
by commenting out the bold #include (and also the bold friend-function, because it needs stuff that gets included by the #include)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
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.
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:// 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
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
and here is the mainfunction where I also include schedule.hCode:// 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; } }
I just noticed some other strange thing.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; }
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



LinkBack URL
About LinkBacks


