Possible Duplicate:
When to use forward declaration?
I’m using Kubuntu & eclipse.
I have those two classes:
Student.h
#ifndef STUDENT_H_
#define STUDENT_H_
#include <iostream>
#include <string>
#include <vector>
#include "Course.h"
using namespace std;
class Student {
public:
Student(vector<string> &vec);
virtual void study(Course &c)=0;
virtual ~Student();
private:
string _studentId;
string _department;
string _pathToImage;
};
#endif /* STUDENT_H_ */
Course.h
#ifndef COURSE_H_
#define COURSE_H_
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include "Student.h"
using namespace std;
class Course {
public:
Course(vector<string> &vec);
virtual void teach();
virtual void reg(Student &s)=0;
virtual ~Course();
private:
string _department;
string _name;
int _semester;
int _minimumGrade;
};
#endif /* COURSE_H_ */
And i’m getting this error while compliing:
Description Resource Path Location Type
‘Course’ has not been declared Student.h /hw2/include line 22 C/C++ Problem
I have some more classes that inheriting those class. I don’t think that this is the problem.
What can be the problem?
Thanks
EDIT:
After some edits recording to your answers, this is my files now:
Course.h
#ifndef COURSE_H_
#define COURSE_H_
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <stdlib.h>
class Student;
using namespace std;
class Course {
public:
Course(vector<string> &vec);
virtual void teach();
virtual void reg(Student &s)=0;
virtual ~Course();
private:
string _department;
string _name;
int _semester;
int _minimumGrade;
};
#endif /* COURSE_H_ */
Student.h
#ifndef STUDENT_H_
#define STUDENT_H_
#include <iostream>
#include <string>
#include <vector>
class Course;
using namespace std;
class Student {
public:
Student(vector<string> &vec);
virtual void study(Course &c)=0;
virtual ~Student();
private:
string _studentId;
string _department;
string _pathToImage;
};
#endif /* STUDENT_H_ */
Course.cpp
#include "../include/Course.h"
#include "../include/Student.h"
Course::Course(vector<string> &vec): _department(""), _name(""), _semester(0), _minimumGrade(0) {
_department = vec[0];
_name = vec[1];
_semester = atoi(vec[2].c_str());
_minimumGrade = atoi(vec[3].c_str());
}
Course::~Course() {
// TODO Auto-generated destructor stub
}
Student.cpp
#include "../include/Course.h"
#include "../include/Student.h"
Student::Student(vector<string> &vec): _studentId(""), _department(""), _pathToImage("") {
_studentId = vec[0];
_department = vec[1];
_pathToImage = vec[2];
}
Student::~Student() {
// TODO Auto-generated destructor stub
}
and it’s now given me alot of error like this:
Description Resource Path Location Type
required from ‘static void __gnu_cxx::__alloc_traits<_Alloc>::construct(_Alloc&, __gnu_cxx::__alloc_traits<_Alloc>::pointer, const _Tp&) [with _Tp = Student; _Alloc = std::allocator<Student>; __gnu_cxx::__alloc_traits<_Alloc>::pointer = Student*]’ hw2 line 202, external location: /usr/include/c++/4.7/ext/alloc_traits.h C/C++ Problem
required from ‘static void __gnu_cxx::__alloc_traits<_Alloc>::construct(_Alloc&, __gnu_cxx::__alloc_traits<_Alloc>::pointer, const _Tp&) [with _Tp = Course; _Alloc = std::allocator<Course>; __gnu_cxx::__alloc_traits<_Alloc>::pointer = Course*]’ hw2 line 202, external location: /usr/include/c++/4.7/ext/alloc_traits.h C/C++ Problem
required from ‘void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Course; _Alloc = std::allocator<Course>; std::vector<_Tp, _Alloc>::value_type = Course]’ hw2 line 885, external location: /usr/include/c++/4.7/bits/stl_vector.h C/C++ Problem
required from ‘void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Course; _Alloc = std::allocator<Course>; std::vector<_Tp, _Alloc>::value_type = Course]’ hw2 line 893, external location: /usr/include/c++/4.7/bits/stl_vector.h C/C++ Problem
required from ‘void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Student; _Alloc = std::allocator<Student>; std::vector<_Tp, _Alloc>::value_type = Student]’ hw2 line 885, external location: /usr/include/c++/4.7/bits/stl_vector.h C/C++ Problem
required from ‘void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Student; _Alloc = std::allocator<Student>; std::vector<_Tp, _Alloc>::value_type = Student]’ hw2 line 893, external location: /usr/include/c++/4.7/bits/stl_vector.h C/C++ Problem
Get rid of the includes, and instead just put
class Course;into student.h andclass Student;into course.h. It’s sufficient for the types to be incomplete, since you only need them in function arguments (and actually you only need references to them).You will now need to add the relevant includes to the .cpp files, e.g. student.cpp should start with
#include "student.h"and#include "course.h".