> どうしてこのようなエラーが起こるのか
エラーメッセージの通りだと思いますが.
あなたは,
コード:
float func_add(float, float);
として,関数func_addの型を宣言しました.
つまり,
「関数 func_add とは,引数はfloat型が2つで,戻り値はfloat型であるぞ!」とコンパイラに対して声高に宣言したのです.
にもかかわらず,あなたは
先の宣言とは矛盾した(型の異なる)関数func_addの定義を記述しました.
それを見たコンパイラからすれば,「は? さっきの宣言とちがくね?」となるわけです.