我的头文件仅仅声明了变量,没有定义,为什么还会报这个错误?
目录结构(两个cpp包含一个头文件):
head.h:
#ifndef HEAD_H
#define HEAD_H
#include<stdio.h> /*标准输入输出定义*/
...
#define FALSE 0
#define TRUE 1
...
int fd;
uint8_t recv[1024];
int addr[4];
bool verified;
int frmType;
#endif
我的头文件仅仅声明了变量,没有定义,为什么还会报这个错误?
目录结构(两个cpp包含一个头文件):
head.h:
#ifndef HEAD_H
#define HEAD_H
#include<stdio.h> /*标准输入输出定义*/
...
#define FALSE 0
#define TRUE 1
...
int fd;
uint8_t recv[1024];
int addr[4];
bool verified;
int frmType;
#endif
main.cpp代码贴一下?猜测main.cpp也定义了。include头文件,相当于把头文件中的代码包在在cpp文件中。除非你在语句前加上extern显示指定这些变量在其它地方定义。
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
在 C++ 里,对于一个变量声明,只要它没有
extern
,或者有 initializer ,那么它就是一个定义。所以,你贴出的所有在 C++ 里都是定义(definition)。
在多个文件里 include ,就会在多个文件里定义,从而引起重复定义的错误。
======================
在 C 里(因为你还贴了一个 C 标签 ....),它们会被叫做 tentative definition ,最终还是会成为 definition 。
但是,C 标准附录J(Common extensions)里有这样一条:
这一个扩展允许一个变量在多个文件里定义。实现这个扩展的编译器可能并不报错。
=====================
C 与 C++ 是两种不同的语言