所以我有一个头文件,比如说“header.h”,它的保护如下:
#ifndef __HEADER1_H
#define __HEADER1_H
//type and function def
typedef struct
{
float r; //process noise
float k; //process gain
}state_t;
int get_state(state_t* state, float b);
#endif
现在我有另外两个标题,我定义如下:
#ifdef __HEADER2_H
#include "header.h"
//function def
#endif
第二个标题:
#ifdef __HEADER3_H
//function
//the reason it is done this way is for cnditional compiling such that if the caller
//defines __HEADER3_H t this file won't be included.
#include "header.h"
#endif
现在我怀疑编译器抱怨在 header2 和 header3 的源实现中未检测到 header.h 中定义的类型和函数。所以我也在源文件中包含了 header.h 。现在链接器抱怨在 header.h 中定义的函数是多重定义的。我的理解是,由于 header.h 受 ifndef 保护,它只会被包含一次,所以我看不到问题所在。这是我得到的错误:
Symbol get_state multiply defined(by kalman.o and dsp.o)
我有没有可能做一些不寻常的错误?