-2

我的问题是关于在 g++ 编译器中链接文件。

我有一个.cpp名为的文件A.cpp,其中包含一个父类及其子类,每个类都使用 中定义的另一个类的实例B.cpp,并且在中定义的类中B.cpp,我们使用 A 中定义的所有类的实例!

我应该如何链接这些文件?这是一种非常糟糕的编程风格吗?我尝试过包含A.cpp一个B.cpp和一个B.cppA.cpp但它是不正确的。

4

2 回答 2

0

您不必在 B.cpp 中包含 A.cpp,您需要使用头文件。

https://en.wikipedia.org/wiki/Header_file

基本上,头文件包含类和方法的定义。

如果我理解您的示例,您需要一个 Ah 文件,该文件将包含在 B.cpp 中

于 2013-06-24T09:48:17.807 回答
0

您应该在头文件中定义一个类。只有函数和静态数据成员定义应该在 .cpp 文件中。您还应该使用编译器宏(#if defined / #define / #endif)来防止多重包含。

关于 B 中的 A 和 A 中的 B:

您所说的会导致无限递归:每个 A 包含一个 B,每个 B 都包含一个 A,每个 B 都包含一个 B,每个 B 都包含一个 A ...等等。

你显然不能那样做。尽管如此,您仍然可以在 A 中拥有一个 A 指针 int B 和一个 B 的实例。

我不知道你想要实现什么,但你可以使用 B 的构造函数来传递指向它所包含的 A 对象的指针(例如,如果总是如此)。

溴化氢

#if !defined(B_CLASS_H)
#define B_CLASS_H
class A; // forward declare A, no include "A.h" here
class B 
{
  A * a_pointer;
public:
  B (A* another_A);
};
#endif

B.cc

#include "B.h"
B::B (A* another_A) : a_pointer(another_A) { }

#if !defined(A_CLASS_H)
#define A_CLASS_H
#include "B.h"
class A
{
  B b_instance;
public:
  A (void);
};
#endif

cc

#include "A.h"
A::A (void) : b_instance(this) { }
于 2013-06-24T09:48:39.977 回答