C++ 如何在链接的两个不同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

假设我有一个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 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