[英]std::stoi not recognized by eclipse
在我的系統上,運行 Windows 7 x64、Eclipse Luna 和 g++ 4.9.2(通過 cygwin 安裝),似乎 std::stoi 從未被 g++ 聲明過。 根據文檔, stoi 是字符串庫的一部分,所以顯然我有#include <string>
。
此外,我知道 stoi 是在 C++11 中引入的,並且我已經為我的編譯器 (g++) 設置了適當的標志,即使這看起來像是IDE 錯誤,而不是編譯器錯誤。
不過,在構建我的項目時,我會收到以下錯誤消息之一:
error: 'stoi' is not a member of 'std'
error: Function 'stoi' could not be resolved
我該如何解決? 如何讓 Eclipse 識別 stoi?
這需要大量挖掘,但顯然,聲明 stoi 的代碼位於<basic_string.h>
,它看起來像這樣:
#if (defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99) \
&& !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
#include <ext/string_conversions.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
// 21.4 Numeric Conversions [string.conversions].
inline int
stoi(const string& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa<long, int>(&std::strtol, "stoi", __str.c_str(),
__idx, __base); }
因此,很容易看出,為了使std::stoi
可用,必須確保以下幾點:
__GXX_EXPERIMENTAL_CXX_0X__
已定義。_GLIBCXX_USE_C99
已定義。_GLIBCXX_HAVE_BROKEN_VSWPRINTF
沒有定義。現在,在 Eclipse 中,如果您打開了自動完成功能,檢查這些並設置它們非常容易!
檢查:只需在代碼中的任何位置開始鍵入它們,在新行上,然后查看自動完成(通常是 CTRL+Space)是否建議它們。 如果確實如此 - 它們已被定義。 如果不是,請繼續閱讀。
定義也很簡單! 導航到:項目 -> 屬性 -> C/C++ 常規 -> 路徑和符號 -> 符號選項卡。
單擊左側選項列表中的GNU C++ ,然后單擊Add ,並簡單地提供所需的名稱。
添加所需的定義后,單擊確定並關閉屬性窗口,然后通過導航到 *Project -> C/C++ Index -> Rebuild 重建索引器。
PS 在此過程中,您可能還想定義以下符號: __cplusplus
,值為201103L
。
(這將有助於設置各種其他選項,例如 std::unordered_set)。
它隱藏在<basic_string.h>
后面 - 只是您的 env 沒有配置為公開那段代碼。
當您有一個 Makefile 項目時,Eclipse 索引器有時需要幫助了解環境以匹配您的 Makefile。 因此,即使 eclipse 會顯示錯誤,也可以使用 make 成功構建您的項目。
對於這個特定問題,您基本上希望將__cplusplus
宏設置為 >= 201103L。 將-std=c++11
添加到您的 makefile 可以為您的 make 環境執行此操作,但我們也必須幫助 Eclipse。
對我來說,即使按照 hyit 的指示,Eclipse 仍將其設置為 199711L。
修理:
Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc -> CDT GCC Built-in Compiler Settings [ Shared ] -> Add -std=c++11 after ${COMMAND}
重建您的項目的索引,然后就可以了。 它應該工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.