我的问题是关于在g ++编译器中链接文件。
我有一个名为.cpp
的{{1}}文件,其中包含父类及其子类,每个类使用A.cpp
中定义的另一个类的实例,以及B.cpp
中定义的类1}},我们使用A!
我该如何链接这些文件?这是一个非常糟糕的编程风格?
我尝试在B.cpp
中添加A.cpp
,在B.cpp
中添加B.cpp
,但这是不正确的。
答案 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对象的指针(例如,如果总是如此)。
#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
#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
#include "A.h"
A::A (void) : b_instance(this) { }