1. clang-tidy: Non-const lvalue reference to type 'basic_string<>' cannot bind to a temperary of type 'basic_string<>'
錯誤描述:
這個錯誤出現在我試圖傳一個臨時變量給一個 函數,這個函數的參數類型爲 引用(非常量引用)
原因分析:
根據編譯錯誤提示可以知道,不能將形參begin、end綁定到a.begin()和a.end()的返回值,因爲該返回值是一個臨時量,臨時量的生命週期可能在a.begin()和a.end()執行完後就結束了。因此編譯器認爲普通引用綁定一個臨時量,在find_int函數中可能會修改這個臨時量,然而此時臨時量可能已經被銷燬,從而導致一些未定義的行爲,因此編譯器不允許將普通引用綁定到一個臨時量上。
解決辦法:
在函數定義的地方加上const變成常引用或者去掉&引用。
這篇博客C++ non-const lvalue reference cannot bind to a temporary講的很清楚。
參考:
C++ non-const lvalue reference cannot bind to a temporary
2. error: expected class-name before ‘{’ token
class xxxxx : public xxxxxxx{
問題描述: 出現這個問題是因爲我錯誤的重複包含了頭文件。 就是頭文件 A.h 中包含 C.h, D.h, E.h 而在D.h 中又包含了A.h 導致編譯器報錯。
解決辦法: 解決辦法只要去掉重複包含的頭文件就可以了。
補充: 出現這個問題還有可能是 定義類的時候 忘記在括號後面添加分號, 即 class A{} (漏掉了後面的分號, 正確的應該是 class A{}; )。
參考:
expected class-name before '{' token https://blog.csdn.net/cwj649956781/article/details/7953748