web-dev-qa-db-ja.com

宣言されていない関数stoi

私はstoiを使用して文字列を整数に変換しようとしていますが、宣言されていないと言います。私は標準ライブラリとインクルードを持っていますが、それでも「[Error] 'stoi'はこのスコープで宣言されていません」と言っています

コードは次のとおりです。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>

using namespace std;

int main()
{
string end, init;
cout << "Introduction" << endl;
cout << "Start time (xx:yy)" << endl;
cin >> init;
string hours0 = init.substr(0,2);
int hours = stoi(hours0);
cout << hours << endl;
system("pause");
return 0;

}

なぜ機能しないのか教えてください、またはそれを行うための2番目のオプションを教えてください。

19
user3258512

std::stoi はC++ 11で導入されました。コンパイラの設定が正しいこと、および/またはコンパイラがC++ 11をサポートしていることを確認してください。

21

上記の答えは正しいですが、十分に説明されていません。

g++ -std=c++11 my_cpp_code.cpp

コンパイラオプションに-std = c ++ 11を追加します。これは、デフォルトではg ++/gccの新しいc ++ 11標準を使用していない古いバージョンのdebianまたはubuntuを使用している可能性が高いためです。 Debian Wheezyでも同じ問題が発生しました。

http://en.cppreference.com/w/cpp/string/basic_string/stol

c ++ 11が必要であることを、緑色の右に非常に小さな文章で示しています。

17
Eamonn Kenny

stoiはC++ 11関数です。 C++ 11を理解するコンパイラを使用していない場合、これは単にコンパイルされません。

代わりにstringstreamを使用して入力を読み取ることができます。

stringstream ss(hours0);
ss >> hours;
10
nneonneo

stoiは「C++ 11以降」で使用できます。コンパイラが最新であることを確認してください。

代わりにatoi(hours0.c_str())を試すことができます。

9
Daniel

この行の代わりに-

int hours = stoi(hours0);

これを書く-

int hours = atoi(hours0.c_str());

4
pistol_pete

別の回答の下にあるコメントで、g++ MS Windowsで。

この場合、 -std=c++11一番上の回答で示唆されているように、それでも問題は解決しません。

あなたの状況について議論している次のスレッドをご覧ください: std :: stoiはMinGW上のg ++​​ 4.6.1に存在しません

1
M.M

TDM-GCCの最新バージョンをインストールするには、こちらからリンク- http://wiki.codeblocks.org/index.php/MinGW_installation

0
Riya Arora

CMakeLists.txtに次の行を追加することで、この問題を解決できました。

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3 -march=native")

# Check C++11 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
   add_definitions(-DCOMPILEDWITHC11)
   message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
   add_definitions(-DCOMPILEDWITHC0X)
   message(STATUS "Using flag -std=c++0x.")
else()
   message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

他のフェローが述べたように、それは-std=c++11問題です。

0
Färid Alijani

C++のプログラミングプロジェクトで作業中にこのエラーに遭遇しました。

  1. atoi()、stoi()はg ++の古いc ++ライブラリの一部ではないため、g ++のコンパイル時に以下のオプションを使用します-std = c ++ 11 -o my_app_code my_app_code.cpp
  2. コードに次のファイルを含めます#include <cstdlib>

これはエラーを処理する必要があります

0
Nnaik
#include <algorithm>

これを含めると、それを使用してコンパイルできます...

g ++ -Wall -std = c ++ 11 test.cpp -o test

ソースファイルと同じディレクトリにある.batファイルの最初の行に「cd/d%〜dp0」を追加して、「自動」コンパイルのために.batファイルをダブルクリックするだけです。

お役に立てれば!

0
Doug

C++ 11を実行していますか? stoiはC++ 11で追加されました。古いバージョンで実行している場合は、atoi()を使用します

0
Sisnett

このオプションを追加:-std=c++11コードのコンパイル中

g++ -std=c++11 my_cpp_code.cpp
0
Nassima Noufail