eclipse :報錯 ‘XXXX‘ does not name a type的解決辦法

Lu_gl發表於2020-08-14

針對這個錯誤,我的具體報錯為’constexpr’ does not name a type,但是我改成const就不會出現這個錯誤了,為了找到根本的原因開始蒐集資料。

原因一:對於不同的C++版本的問題:

constexpr是C++11開始提出的關鍵字,其意義與14版本有一些區別。
C++11中的constexpr指定的函式返回值和引數必須要保證是字面值,而且必須有且只有一行return程式碼,這給函式的設計者帶來了更多的限制,比如通常只能通過return 三目運算子+遞迴來計算返回的字面值。
而C++14中只要保證返回值和引數是字面值就行了,函式體中可以加入更多的語句,方便了更靈活的計算。
const與constexpr 的區別是什麼呢?
const並不能代表“常量”,它僅僅是對變數的一個修飾,告訴編譯器這個變數只能被初始化,且不能被直接修改(實際上可以通過堆疊溢位等方式修改)。而這個變數的值,可以在執行時也可以在編譯時指定。

constexpr可以用來修飾變數、函式、建構函式。一旦以上任何元素被constexpr修飾,那麼等於說是告訴編譯器 “請大膽地將我看成編譯時就能得出常量值的表示式去優化我”。
下面具體分析一下發現可能與C++的版本有關係,後面檢視了eclipse的屬性配置 發現確實需要更改配置:
具體如下:
在這裡插入圖片描述

在這裡插入圖片描述
主要還是因為下面的C++的版本沒有配置導致的原因,按照下面的配置完成即可,在後面新增上下面的配置std=c++11
在這裡插入圖片描述
現在在執行就不會報錯誤了。

原因二:標頭檔案重複呼叫的情況

但是在C++編譯時,也有可能存在這種錯誤的另一種原因可能性,那就是重複呼叫的情況:
具體參考

前置宣告與C++標頭檔案互相包含導致的error: ‘xxx’ does not name a type問題(感謝博主分享)

相關文章