編譯器報錯:第 21 行 `length` 前缺少分號。代碼邏輯看似正確,但編譯失敗。
C++ 規定:**`class`/`struct`/`union` 定義結束的右大括號 `}` 後必須跟分號 `;`**。
class demo { ... }; // ✅ 正確:有分號
class rectangle { ... } // ❌ 錯誤:缺少分號,導致後續解析錯位
錯誤訊息指向 `length` 是因為編譯器將 `rectangle` 視為聲明的一部分,繼續解析後續標識符,最終在 `length` 處發現語法不合法才報錯,誤導行號。
class rectangle {
public:
rectangle() { x = 1000; cout << "rectangle的默認構造函數" << x << endl; }
rectangle(int i, int j, int k) : x(i), width(j), length(k) {
cout << "rectangle的帶三個參數的構造函數" << "長方形b的面積為:" << length.get() * width.get() << endl;
}
~rectangle() { cout << "rectangle的默認析構函數" << x << endl; }
int area() { return length.get() * width.get(); }
private:
int x;
demo length;
demo width;
}; // ← 關鍵分號
| 構造 | 範例 |
|---|---|
| class/struct/union 定義 | `class A {}; struct B {}; union C {};` |
| 枚舉類型定義 (C++11 scoped enum 除外) | `enum Color { Red, Green };` |
| 類別內靜態成員聲明 (定義在類外仍需分號) | `static int count;` |
| 命名空間別名 | `namespace fs = std::filesystem;` |
| using 類型別名 | `using Vec = std::vector |