簡體   English   中英

eclipse 無法識別 std::stoi

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM