C++ 如何在链接的两个不同cpp文件中包含一个cpp文件?
假设我有一个cpp简单文件C++ 如何在链接的两个不同cpp文件中包含一个cpp文件?,c++,C++,假设我有一个cpp简单文件 //blah.cpp int blah() { return 1; } 有两组文件,其中一个继承另一个 a、 h: a、 包括a.h //a.cpp #include "blah.cpp" #include "a.h" Blah::Blah(int var) : myvar(var) {} int Blah::callingblah() { blah(); return 2; } b、 继承a.h的h: #ifndef B_H #define
//blah.cpp
int blah()
{
return 1;
}
有两组文件,其中一个继承另一个
a、 h:
a、 包括a.h
//a.cpp
#include "blah.cpp"
#include "a.h"
Blah::Blah(int var) : myvar(var) {}
int Blah::callingblah()
{
blah();
return 2;
}
b、 继承a.h的h:
#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,也有主要方法
//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();
}
这里的问题是我得到了“多重定义”错误,因为我在多个地方包含了blah.cpp
但我不能包含blah.cpp,因为这样我将得到“not declared”错误
我故意不为了教育和经验而胡说八道。在某些情况下,您只需要包含cpp而不需要标题
如何在不为blah.cpp创建头文件的情况下解决此问题?您不会将cpp文件包含到其他cpp文件中。相反,您为它创建一个标题,并将其包含在内。在您的情况下,标题将非常短: 诸如此类:
int blah();
现在,用
“blah.h”
替换“blah.cpp”
,并按照您使其工作的方式编译代码。如果您在a.h
中包含blah.cpp
,那么您也将其包含在b.h
中。
因为b.h
继承a.h
,所以它将继承所有a.h
包含的文件
a.h <--- //here you include blah.h(never .cpp)
/ \
/ \
a.cpp b.h
\
b.cpp
a.h不包含*.cpp文件。可能与@marumaru重复,请稍候!不要否认我的重复提议,因为你问的问题与我的不同。所有的答案都是为了解决你的特殊问题<代码>#包括
头文件和链接翻译单元。如果您不需要任何头文件,现在可能会重复reason@marumaru您可以将相同的转发声明(即int blah();
)写入这两个文件,其效果与包含头的效果相同。@marumaru--如果您“不管出于什么原因,你都不想要头文件”你在和语言的结构抗争,你会输的。
int blah();
a.h <--- //here you include blah.h(never .cpp)
/ \
/ \
a.cpp b.h
\
b.cpp