c++ 錯誤收集

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++之error: cannot bind non-const lvalue reference of type ‘myString&’ to an rvalue of type ‘myString’

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 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章