访问其他文件中定义的类

时间:2013-06-24 09:41:57

标签: c++ gcc

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

我有一个名为.cpp的{​​{1}}文件,其中包含父类及其子类,每个类使用A.cpp中定义的另一个类的实例,以及B.cpp中定义的类1}},我们使用A!

中定义的所有类的实例

我该如何链接这些文件?这是一个非常糟糕的编程风格? 我尝试在B.cpp中添加A.cpp,在B.cpp中添加B.cpp,但这是不正确的。

2 个答案:

答案 0 :(得分:0)

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

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

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

如果我理解你的例子,你需要一个A.h文件,你将包含在B.cpp

答案 1 :(得分:0)

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

关于A中B和B的A:

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

你显然不能这样做。但是,您可以使用例如A指针int B和A中的B实例。

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

B.h

#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) { }

A.H

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

A.cc

#include "A.h"
A::A (void) : b_instance(this) { }