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