1

我有以下实现:

A的标题:

class A
{
public:
foo();
};

A 有自己的 .cpp 文件,其中包含 foo() 的实现

//B的头部

#include "A.h"
class B
{
public foo();
};

注意:B 没有自己的标头

现在在 C.cpp 类中,我想重用 A 的标头和 Bo 的实现,所以在 C.cpp 中我这样做:

//C.cpp
#include "A.h"
....
B b;
b.foo();
..

当我编译上面的代码时,我一定会得到函数 foo() 的重新声明错误。我想知道是否有任何方法可以告诉 GNU 编译器采用 Bo 并省略 Ao.. 或者告诉编译器考虑包含实现的 make 文件中的第一个对象并忽略其余部分?

我正在使用 GNU v2.16

4

1 回答 1

2

您的问题是关于重新声明的,A因为C.cpp它会看到 2 个声明A一个 throughA.h和另一个 through B.h,所以只需保护A.h标题保护以避免多次包含它,通常您应该始终保护标题:

#ifndef HEADER_A_h_INCLUDED
#define HEADER_A_h_INCLUDED
class A {...};
#endif

现在,如果您包含A.h多次,此守卫将使第二次包含为空!

于 2012-11-30T06:01:07.280 回答