繁体   English   中英

解决 GNU 中的链接器错误以进行重新声明

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM