失敗1:unknown type name 'class'
エラー
~.h , unknown type name 'class'; did you mean 'labs'?
class EKF_class{
^~~~~
labs
ヘッダファイル
#ifndef EKF
#define EKF
#include "Arduino.h"
class EKF_class{
private:
static float invSqrt(float x);
float qw;
float qx;
float qy;
float qz;
float wx;
float wy;
float wz;
float mgIrap[3][3] = { { 0. , 64.4551274, -68.3301152},{-65.2699143, 0. , 71.0792784},{56.5946296, -58.1367176, 0. }} ;
//正確には、inv_I * alpha のこと。 T = alpha * V - beta * dphi
//dphiを
float inv_I[3] = {10.396,-10.9436,-7.7065};
public:
EKF_class(void);
/*
void add3_3(float A_pt[3][3],float B_pt[3][3]);
void eq3_3(float A_pt[3][3],float B_pt[3][3]);
void mul3_3(float A_pt[3][3],float B_pt[3][3]);
void disp3_3(float A[3][3]);
*/
};
#endif
原因
ライブラリのCコードの名前を「--.c」にしていた
「--.cpp」にする必要がある。
原因2(2023/12/28 追加)
同様のエラーが再度発生、cppに変更したが解決せず。
- コンストラクタ追加
- cpp側にヘッダファイルインクルード追加
- ヘッダファイルが2つある時に#ifndef 名前で同じ名前にしてるとだめ
- メンバ変数へのアクセスを
Class_name::member
に修正
上記のどれかで解決
クラス作成例
失敗1-2
does not name a type
コンストラクタについたエラー
原因
Classの宣言がうまくいっていないということ。classが宣言できていない
解決
cppファイル内にhファイルをincludeするように変更
(Qiitaの# と ##って違いが弱くて見にくいね・・・###にしたらいいのかな)
失敗2
cannot convert '<brace-enclosed initializer list>' to 'float' in assignment
A_w[3][4] = {{-2*qy,2*qz,-2*qw,2*qx},{2*qx,2*qw,2*qz,2*qy},{2*qw,-2*qx,-2*qy,2*qz}};
原因
すでに、定義した配列に対し{}で代入することはできない。
失敗3
EKF.cpp: In member function 'void EKF_class::make_A()':
どこがエラーかはわかるが、何がよくないかは不明
と思ったが、この文章はmake_A()という関数内でエラーがあるよと言っている
この文章の下に本当のエラー原因があります。
失敗4
exit status 1
expected unqualified-id before ')' token
error: abstract declarator '<unnamed class>' used as declaration
コンストラクタの宣言に発生するエラー
苦痛
ハゲそう。ガチでゴミ
理由がわからない
ChatGPTに全コード渡してもわからず・・・
極限までコードを簡略化しても消えない
解決
#ifndef Th_control
#define Th_control
/*
*/
#endif
はダメ
#ifndef TH
#define TH
/*
*/
#endif
なら通った。
インクルードガードの書き方の問題??
プリプロセッサは大文字しか対応できないとかあるのかな。
とりあえず、辛い。
わからない。時間がかかる・・・
変な落とし穴が嫌い。
誰だこの仕様作ったの!!!!!!!!!!