关于c ++:如何在两个链接的不同cpp文件中包含cpp文件?


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();

现在用"blah.h"替换"blah.cpp",并按照您的方式编译代码以使其工作。


如果在a.h中包含blah.cpp,那么您也将其包含在b.h中。
因为b.h继承了a.h,所以它将继承所有a.h包含的文件。

1
2
3
4
5
6
             a.h <--- //here you include blah.h(never .cpp)
            /   \
           /     \
        a.cpp    b.h
                   \
                   b.cpp

所以blah.h中的方法现在可以在a fileb file中使用它。
main中包含a.h,这就足够了。