私は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番目のオプションを教えてください。
std::stoi
はC++ 11で導入されました。コンパイラの設定が正しいこと、および/またはコンパイラがC++ 11をサポートしていることを確認してください。
上記の答えは正しいですが、十分に説明されていません。
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が必要であることを、緑色の右に非常に小さな文章で示しています。
stoi
はC++ 11関数です。 C++ 11を理解するコンパイラを使用していない場合、これは単にコンパイルされません。
代わりにstringstream
を使用して入力を読み取ることができます。
stringstream ss(hours0);
ss >> hours;
stoiは「C++ 11以降」で使用できます。コンパイラが最新であることを確認してください。
代わりにatoi(hours0.c_str())を試すことができます。
この行の代わりに-
int hours = stoi(hours0);
これを書く-
int hours = atoi(hours0.c_str());
別の回答の下にあるコメントで、g++
MS Windowsで。
この場合、 -std=c++11
一番上の回答で示唆されているように、それでも問題は解決しません。
あなたの状況について議論している次のスレッドをご覧ください: std :: stoiはMinGW上のg ++ 4.6.1に存在しません
TDM-GCCの最新バージョンをインストールするには、こちらからリンク- http://wiki.codeblocks.org/index.php/MinGW_installation
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
問題です。
C++のプログラミングプロジェクトで作業中にこのエラーに遭遇しました。
これはエラーを処理する必要があります
#include <algorithm>
これを含めると、それを使用してコンパイルできます...
g ++ -Wall -std = c ++ 11 test.cpp -o test
ソースファイルと同じディレクトリにある.batファイルの最初の行に「cd/d%〜dp0」を追加して、「自動」コンパイルのために.batファイルをダブルクリックするだけです。
お役に立てれば!
C++ 11を実行していますか? stoiはC++ 11で追加されました。古いバージョンで実行している場合は、atoi()を使用します
このオプションを追加:-std=c++11
コードのコンパイル中
g++ -std=c++11 my_cpp_code.cpp