ラベル cpp の投稿を表示しています。 すべての投稿を表示
ラベル cpp の投稿を表示しています。 すべての投稿を表示

c++でstatic constなclass member変数としてfloat型を定義したい場合はconstexprを使う

2024年8月19日月曜日
遭遇したエラーとconstexprを利用した回避 class memberのstatic constなfloat型を定義するとエラーが発生しました。 class Sample0 { public: static const float staticConstFloat0 =...

cで0始まりの数字は8進数と認識されるため08と09はエラーになる

2024年7月22日月曜日
cのプログラムで日付を数字2文字で定義していると8と9で下記のエラーが発生して戸惑いました。 int day = 08; error: invalid digit "8" in octal constant int day = 09; error: inv...

cppでconst値を参照してエラーを出したいときはstatic_assertが使える

2024年3月17日日曜日
背景 cppで固定値(const値)を参照してビルド時にエラーを出すのはstatic_assertを使えば良いと分かったので、利用例を備忘録として記事に残します。 使ったもの c++11かそれより新しいc++の環境 利用例 const値を参照して条件を記述し、その条件に合わなかっ...

cppでclassの配列を定義する場合、{}を二重で使う

2023年12月31日日曜日
cppでconstructorに引数が必要なclassの配列(array)を作る場合、[]と()の組み合わせではなく、{}を二重に使って定義します。 具体的には下記のように書きます。 class Book { public: std::string title; Boo...

cppのクラスメンバ関数をbindを通してstd::functionとして扱う

2023年12月25日月曜日
背景 以前クラスメンバ関数をコールバック関数として渡したいとgithubで要望したところbindを使えば可能と助言をいただきました。 Request of setting notify_callback as class instance. #342 この手法は時々使いたくなる場...

cppのクラスメンバ関数のconst備忘録

2023年11月14日火曜日
背景 cppのプログラムでconstを付けてエラーが出る度にどうだったか迷うので、自分の言葉でまとめます。 クラスメンバ関数のconst 下記のプログラムを書いた時 class Item { public: float getValue() const { return ...

cppでtemplateを利用して定義したclassを別名で呼べるようにしつつdeprecatedの警告をつける

2022年10月16日日曜日
背景 ライブラリとして公開しているクラス名を変えたくなったので取り組んだところ、templateを利用して定義したclassの別名での呼び出し方法と、deprecated(利用非推奨)警告の付与方法の把握に手間取ったので、備忘録を兼ねて記事を残します。 書き方:usingを利用し...

VSCodeでのcppの形式をインデント2で改行少なめに変更する

2022年9月3日土曜日
背景 VSCodeのcppの形式はインデントがスペース4で改行多めが標準です。 インデントがスペース2で改行少なめが好みなので、その設定方法を備忘録として記事にします。 使ったもの VSCode 1.70.2で確認しました。 設定方法 設定画面を開く 「ファイル -> ユー...

VSCodeのcpp開発時にincludePathやdefinesを設定してエラーを解消する

2022年7月10日日曜日
背景 PC向けにビルドするcppのプログラムを見る機会がありVSCodeで開いたところ、Makefileでパスを指定するライブラリを読み込む部分がエラーとして赤線が表示される状況に遭遇しました。 makeは出来るので記述は問題ないのですが、赤線が引かれたままだと他の不具合を見落と...

VSCodeのC言語(C++)のオートフォーマットを部分的に無効化する

2022年3月20日日曜日
VSCodeでC言語やcppを書くと、linuxならCtrl + Shift + i を入力するとオートフォーマットが実行され、自動でインデントや行の長さを整理してくれます。 しかしながら、情報表示の関係で整理して欲しくない場合があります。 例えば下記のような記述をしていると ...

cppのvirtualなdestructorに対する「undefined reference to `vtable for クラス名::~クラス名`」を回避する書き方

2021年11月21日日曜日
背景 c++でvirtualを利用して継承元となるクラスを定義したところ、表題のように「undefined reference to `vtable for クラス名::関数`」というエラーが出てビルドに失敗しました。 初めて遭遇した時はデストラクタのみにそのエラーが出ていたため...

cppでクラスメンバー関数を引数として受け取る関数の書き方

2021年11月7日日曜日
背景 以前 ROSのsubscriberにクラスメンバー関数を渡した ことがあり、クラスメンバー関数を引数に渡す関数が定義可能なのは把握していました。 それを使うと便利な場面があったので、書き方を調べて実現する機会がありました。 今後も使う場面がありそうなので、備忘録を兼ねて書き...

c言語でのヘッダファイル重複読込防止はpragma onceが便利

2021年5月31日月曜日
c言語でヘッダファイルの重複定義をする際、自分は下記のように「ifndefとdefine」を駆使して重複読込防止(インクルードガード)をしてきました。 #ifndef _SAMPLE_LIB_H_ #define _SAMPLE_LIB_H_ class SampleLib { ...

定数参照したクラスインスタンスの関数呼び出し時に発生する警告は、constメンバー関数にすると消える

2021年3月28日日曜日
背景 cppで関数にクラスインスタンスを渡す際、「&」を付けて参照として渡すと実体をコピーしないため若干早くなります。 更に、constを付けて定数の参照と宣言すると、参照でありながら基本的に書き換えを許さないインスタンスになります。 参照で処理を高速化しながら安全に処理...

Arduinoのライブラリで廃止予定警告を出す

2020年10月4日日曜日
背景 Arduino向けのライブラリで関数を廃止したくなったり別の関数の利用を推奨したい場合、何らかの形で利用者にお知らせしたくなります。 cppにdepricated機能 があるので、Arduinoのライブラリで使ってみました。 備忘録を兼ねて書き方と挙動を共有します。 使った...

Arduinoのライブラリでヘッダ(.h)ファイルに実装を書くと、エラーになることがある

2020年9月13日日曜日
背景 自分が作ったArduino向けのライブラリの中で、少ない記述だったのでヘッダファイルに関数の実装を書いていた部分がありました。 そのライブラリを1回しか呼び出さない場合は良かったのですが、Arduinoのライブラリの依存関係機能を利用して他のライブラリでも利用したところ、定...

cppでrosserial-arduinoのsubscriberをクラスのインスタンスとして扱いたい場合は、ラムダ式を利用するとそれらしく書ける

2020年9月6日日曜日
背景 cppでコールバックを渡して初期化するインタンスをクラスの変数として保持しようとしたところ、コンストラクタの内部だけではクラスに依存する値となってしまい思うように初期化出来ませんでした。 試行錯誤したところ、まとめ上げるクラスのコンストラクタにラムダ式を渡せばそれらしく初期...