だから私は、次のように保護されている「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
これで、次のように定義した他の 2 つのヘッダーができました。
#ifdef __HEADER2_H
#include "header.h"
//function def
#endif
2 番目のヘッダー:
#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)
私が異常に間違ったことをしている可能性はありますか?