How to include a cpp file in two different cpp files that are linked?
假设我有一个cpp简单文件
1 2 3 4 5 | //blah.cpp int blah() { return 1; } |
并且有两组文件,其中一组继承另一组。
啊:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //a.h #ifndef A_H #define A_H class Blah { public: Blah(int var); int callingblah(); private: int myvar; }; #endif |
a.cpp包括a.h
1 2 3 4 5 6 7 8 9 10 11 | //a.cpp #include"blah.cpp" #include"a.h" Blah::Blah(int var) : myvar(var) {} int Blah::callingblah() { blah(); return 2; } |
继承a.h的b.h:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #ifndef B_H #define B_H #include"a.h" class ChildBlah : public Blah { public: ChildBlah(int var, int childvar); int callingblah(); private: int childvar; }; #endif |
b.cpp包括b.h,也有主要方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | //b.cpp #include"blah.cpp" #include"b.h" ChildBlah::ChildBlah(int var, int childvar) : Blah(var), mychildvar(childvar) {} int ChildBlah::callingblah() { blah(); return 3; }; int main() { Blah myBlah(1); ChildBlah myChild(1,2); cout << myBlah.callingblah(); cout << myChild.callingblah(); } |
我编译:
1 | g++ a.cpp b.cpp blah.cpp |
这里的问题是我得到"多重定义"错误,因为我已将blah.cpp包含在多个地方。
但我不能不包括blah.cpp因为那样我会得到"未声明"的错误。
为了教育和经验,我故意没有做出什么。 必须有一些场景,你只想包含cpp而没有标题。
如何在不为blah.cpp创建头文件的情况下解决这个问题?
您不将CPP文件包含在其他CPP文件中。 相反,你为它制作一个标题,并改为包含它。 在你的情况下,标题将非常短:
blah.h:
1 | int blah(); |
现在用
如果在
因为
1 2 3 4 5 6 | a.h <--- //here you include blah.h(never .cpp) / \ / \ a.cpp b.h \ b.cpp |
所以
在