同一类型,所有已定义,类型冲突

时间:2018-12-09 20:23:39

标签: c gcc

经过几个小时的搜索,我没有找到解决问题的方法,下面将对其进行解释。 现在,这些是我的源文件和头文件

timer.h:

#ifndef TIMER_H
#define TIMER_H

#include "types.h"

uint64 timer_ticks;

void init_timer(uint32 freq);

void wait(uint64 ticks);

void wait_s(uint64 seconds);

void timer_h(struct regs* r);

#endif TIMER_H

timer.c

 #include "../headers/timer.h"

void init_timer(uint32 freq){
    timer_ticks=0;
    irq_set_handler(0,timer_h);
}

void wait(uint64 ticks){
    uint64 over_ticks=ticks+timer_ticks;
    while(timer_ticks<over_ticks);
}

void wait_s(uint64 seconds){
    uint64 over_ticks=18*seconds;
    wait(over_ticks);
}

void timer_h(struct regs* r){
    timer_ticks++;
}

如您所见,所有内容均已正确定义,但我从编译器收到此错误(我使用GCC-8.2)

include/src/timer.c:21:6: error: conflicting types for 'timer_h'
 void timer_h(struct regs* r){
      ^~~~~~~
In file included from include/src/timer.c:1:
include/src/../headers/timer.h:14:6: note: previous declaration of 'timer_h' was here
 void timer_h(struct regs* r);
      ^~~~~~~

对不起,我的英语,谢谢。

1 个答案:

答案 0 :(得分:0)

您需要事先声明struct regs;,否则:

  

timer.c:21:21:警告:不会声明'struct regs'   在此功能之外可见         [-可见性]

,因此每个struct regs都是不同的类型。打开警告以使编译器为您发现此类问题。