编译老是显示重复定义

2019-08-16 23:19发布

1.png 2.png
编译老是显示重复定义,实际上就一个地方定义了,这是为啥



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
Owen
1楼-- · 2019-08-17 04:25
heiheihaha 发表于 2017-7-11 14:31
我前面加了static 编译是没问题了,但是我一直不明白#ifndef __LCD_H#define __LCD_H       
这个不就是防止重 ...

尽量不要在头文件定义变量。
一般的头文件里用的#ifndef, #define, #endif这几个预编译指令,解决的是一个.c或.cpp文件编译时的重复包含问题,否则会出现类型重复定义问题:"error C2011: 'xxx' : 'class' type redefinition"
而如果在头文件中定义了默认命名空间的变量,那么如果工程中有多个.c或.cpp文件包含了该头文件,在这几个源文件编译后的目标文件.obj中均包含有该变量,于是在链接时会再报一个变量重复定义的错误
你用static修饰之后可以使当前文件的数组变量对其他文件不可见。也就是说,你现在程序里依然存在好几份你定义的数组变量,只不过“骗过”编译器不报错了,但是会占很多存储空间
Owen
2楼-- · 2019-08-17 08:05
 精彩回答 2  元偷偷看……
lvkanger
3楼-- · 2019-08-17 09:46
头文件重复包含!
heiheihaha
4楼-- · 2019-08-17 15:35
本帖最后由 heiheihaha 于 2017-7-10 14:02 编辑

这是main函数
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
这是lcd.c函数
#include "lcd.h"
#include "stdlib.h"
//#include "font.h"
//#include "usart.h"         
#include "delay.h"


         

heiheihaha
5楼-- · 2019-08-17 15:53
Owen 发表于 2017-7-10 11:48
是不是没有用#ifndef  然后lcd.h被好几个文件包含了

#ifndef  用在哪里
Owen
6楼-- · 2019-08-17 18:28
heiheihaha 发表于 2017-7-10 14:03
#ifndef  用在哪里

[mw_shl_code=applescript,true]#ifndef _TEST_H_
#define _TEST_H_

#include "stm32f2xx.h"
#define  int testarray[10];
void test_gpio_Init();

#endif[/mw_shl_code]
类似这样,你去百度一下#ifndef,解释的比较清楚

一周热门 更多>