C++自定義貪吃蛇Snake類一系列問題的解決

FBshark發表於2024-04-09

1. 問題解決 usr/include/c++/11/bits/list.tcc:344:24: error: no match for ‘operator==’

錯誤解釋:

這個編譯錯誤表明編譯器在嘗試使用==運算子比較兩個物件時找不到匹配的運算子函式。在C++中,如果你嘗試比較兩個自定義型別的物件,且沒有為這些物件定義==運算子,編譯器將無法進行比較,從而導致這個錯誤。

解決方法:

1. 如果你在比較的物件是內建型別(如int、float等),確保沒有錯誤地過載了==運算子,如果有,移除自定義的運算子過載。

2. 如果你在自定義型別中使用了std::list,並嘗試比較其中的元素,確保你的自定義型別過載了==運算子。你可以在你的類定義中新增如下函式

bool operator==(const YourClass& lhs, const YourClass& rhs) {
    // 實現比較邏輯
}

2. 問題解決:bool operator== too many parameters for this operator function

這個錯誤資訊表明你正在嘗試為operator==定義一個接收了錯誤數量的引數的函式。

operator==是C++中的一個二元比較運算子,它需要兩個引數來進行比較。通常情況下,這個運算子被過載為類的成員函式或者被過載為兩個物件(或指向物件的指標)的非成員函式。

如果你在定義operator==作為非成員函式,你需要提供兩個引數。如果你在定義它作為成員函式,它通常只需要一個引數(另一個隱式的透過this傳遞),再加上一個返回型別為bool的值。

解決這個錯誤,你需要檢查你的operator==定義,確保它有正確數量的引數。

例如,如果你有一個Point類,你可能會這樣定義operator==

class Point {
public:
    int x, y;
 
    // 非成員函式版本
    friend bool operator==(const Point& lhs, const Point& rhs) {
        return lhs.x == rhs.x && lhs.y == rhs.y;
    }
 
    // 成員函式版本
    bool operator==(const Point& other) const {
        return x == other.x && y == other.y;
    }
};

相關文章