c++ 源代码通常是这样组织的,在头文件(*.h)里声明类定义,在*.cpp里定义成员函数的实现。这样可以在任何一个 *.cpp 里引用任何其他类定义而不会发生重定义问题。
确实有一种情况会 #include "template.cpp". 定义模板的时候,同样在 template.h 定义模板类,在 template.cpp 里定义其实现。但是由于模板的所有代码必须全部在头文件里定义,就会出现在 template.h 的最后 #include "template.cpp"
最常见的方式,
Student.h
#ifndef _STUDENT_H
#define _STUDENT_H
class Student {
public:
Student();
~Student();
string getName() const;
void setName(const string& name);
private:
string name_;
};
#endif
Student.cpp
#include "Student.h"
Student::Student() {
}
...
string Student::getName() const {
return name_;
}
void Student::setName(const string& name) {
name_ = name;
}
Teacher.h
#ifndef _TEACHER_H
#define _TEACHER_H
#include "Student.h" // 引用另一个类定义
class Teacher {
public:
Teacher();
vector
private:
}
#endif
Teacher.cpp
#include "Teacher.h"
#include "Student.h" // 由于有 #ifndef 保护,重复引用不会造成重复定义
vector
Teacher::getStudents() const {
}
把你那类的声明文件加进来就行啦,声明在哪就加哪个,b.cpp也行啊,只要你类是声明在b.cpp,不过这就不符合规范了。
楼主你好!
如果这样的话,的确要把b.cpp里的类写在b.h中,然后#include "b.h"即可,不过,哪里看见过包含实现文件作为头的?一楼搞笑?
当然,在这之前,a.cpp与b.cpp是独立的两个实现文件,互不干扰,所以,也可以把b.cpp里的类原原本本拷贝到a.cpp里作为一个新类即可。
希望对你有所帮助,谢谢!
#include"a.cpp"