[英]Resolve linker errors in GNU for redeclaration
我有以下实现:
A的标题:
class A
{
public:
foo();
};
A 有自己的 .cpp 文件,其中包含 foo() 的实现
//B头
#include "A.h"
class B
{
public foo();
};
注意:B 没有自己的标题
现在在 C.cpp 类中,我想在 C.cpp 中重用 A 的标头和 Bo So 的实现,我这样做:
//C.cpp
#include "A.h"
....
B b;
b.foo();
..
当我编译上面的代码时,我一定会得到函数 foo() 的重新声明错误。 我想知道是否有任何方法可以告诉 GNU 编译器取 Bo 并省略 Ao .. 或者告诉编译器考虑包含实现的 make 文件中的第一个对象并忽略其余对象?
我正在使用 GNU v2.16
你的问题是关于A
重新声明,因为在C.cpp
它会看到 2 个A
声明,一个通过Ah
另一个通过Bh
,所以只需在标题保护中保护Ah
以避免多次包含它,通常你应该始终保护你的标题:
#ifndef HEADER_A_h_INCLUDED
#define HEADER_A_h_INCLUDED
class A {...};
#endif
现在,如果您多次包含Ah
该守卫将使第二次包含成为空!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.