C++ のコンパイラが吐くエラーは長くて難解。よく見る 24 パターンを「典型メッセージ → 原因 → 修正例」で並べました。キーワード検索・カテゴリ絞り込みでピンポイントに探せます。
C と同じく文末セミコロン忘れ。特にクラス定義の末尾、struct {...} の後ろ。
関数の戻り値型を書き忘れた、または前のクラス定義で ; が抜けている。
<iostream> の include 忘れ、または std:: を書き忘れ。
C では暗黙キャストされていた型変換が C++ では拒否される。void* → T* なら static_cast で明示。
引数の型・個数が合うオーバーロードが無い。const 有無やリテラル型(int vs long long)も見られる。
複数のオーバーロードが同程度にマッチ。明示キャストで決める。
const オブジェクトから非 const メンバ関数を呼ぼうとした。メンバ関数を const にする。
一時オブジェクト(rvalue)を T& では受けられない。const T& にするか T&& にする。
コピー禁止クラス(unique_ptr, thread, mutex 等)をコピーしようとした。std::move が必要。
-std=c++11 以降が必要。コンパイルフラグに -std=c++17 を追加。
brace init {} は縮小変換を禁止する。static_cast で意図を明示。
自作クラスの operator<< がまだ定義されていない、または friend 宣言の位置が間違っている。
リンカが関数本体を見つけられない。cpp ファイルをリンク対象に入れ忘れか、ライブラリ -l... の忘れ。
ヘッダに関数の本体を書き、複数 cpp から include された。inline を付けるか cpp に分離。
virtual 関数のうちヘッダ宣言だけで本体の定義を書き忘れ。最初に非インラインな virtual を 1 つ持たせるのが慣例(key function)。
テンプレート引数を推論できない。テンプレート引数を明示する。
テンプレートが型に対して要件を課していて、渡した型が満たさない。エラーメッセージに要件名が含まれるはず。
テンプレート内で依存名を型として使う時は typename が必要。
typo、または前方宣言だけで完全型になっていない(ヘッダ include 漏れ)。
explicit コンストラクタは暗黙変換を許さない。括弧で直接構築するか static_cast。
型の不一致。特に「nullptr を整数に」「int を bool に暗黙変換」などが警告 or エラー。
名前空間が using されていない。std:: を付け忘れ。
ソースファイルに BOM or 全角スペースが紛れ込んだ。保存形式をUTF-8 (BOM なし)に。
ヘッダガードが無い / #pragma once 抜け。