解决 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中,我想重用 A 的标头和 B.o 的实现。所以在 C.cpp 中,我做到了:
//C.cpp
#include "A.h"
....
B b;
b.foo();
..
当我编译上述内容时,我一定会得到函数 foo() 的重新声明错误。我想知道是否有任何方法可以告诉 GNU 编译器采用 B.o 并省略 A.o...还是告诉编译器考虑 make 文件中包含实现的第一个对象并忽略其余对象?
我正在使用 GNU v2.16
您的问题是关于重新声明A
,因为在C.cpp
中,它会看到 2 个声明A
一个通过 A.h
另一个通过 B.h
,所以只需在标头保护中保护A.h
以避免多次包含它,通常您应该始终保护您的标头:
#ifndef HEADER_A_h_INCLUDED
#define HEADER_A_h_INCLUDED
class A {...};
#endif
现在,如果您多次包含A.h
,此守卫将使第二次包含为无!
相关文章:
- C++:具有内部链接的正向声明常量
- 使用说明符 extern 声明的C++中的标识符链接
- C++ 在 CentOS7 中与 g++ 的 DLL 链接后未声明的函数
- 在 h 和 cpp 文件中单独声明和实现模板有时有效,有时会出现链接器错误
- C++链接编辑器找不到函数声明(未定义的引用)
- C :(不重复)积分静态成员初始化(不仅是声明!),导致链接器错误,原因
- 为什么我在声明的函数上收到链接错误
- 默认构造函数不同声明的链接器错误
- GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则出错
- C 静态变量声明怪异链接器错误
- g++是否将C标准库的名称声明为外部"C"链接或外部"C++"?
- 尝试使用 std::函数(未定义的符号)声明模板化类状态时出现链接错误
- 在声明节点创建链接列表时,为什么静态内存分配不起作用
- 如[dcl.typedef]/9所述,仅针对"linkage purposes"的链接声明的目的是什么?
- 正向声明链接器错误
- 解决 GNU 中用于重新声明的链接器错误
- C++模板,不同的声明和定义,链接器无法解析符号
- C ,数组声明,模板,链接器错误
- 在调用函数之前声明函数时出现链接器错误
- 变量声明 - 链接错误 2005 Visual Studio 2008 C++