Ответ 1
std::stoi
был представлен на С++ 11. Убедитесь, что ваши настройки компилятора верны и/или ваш компилятор поддерживает С++ 11.
Я пытаюсь использовать stoi для преобразования строки в целое число, однако он говорит, что он не объявлен. У меня есть стандартная библиотека и включенная, но она все еще говорит: "[Ошибка]" 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;
}
Скажите мне, почему он не работает, или дайте мне второй вариант, пожалуйста.
std::stoi
был представлен на С++ 11. Убедитесь, что ваши настройки компилятора верны и/или ваш компилятор поддерживает С++ 11.
Ответы выше верны, но не очень хорошо объяснены.
g++ -std=c++11 my_cpp_code.cpp
Добавьте -std = С++ 11 к вашим опциям компилятора, так как вы, скорее всего, используете более старую версию debian или ubuntu, которая по умолчанию не использует новый стандарт С++ 11 g++/gcc. У меня была такая же проблема на Debian Wheezy.
http://en.cppreference.com/w/cpp/string/basic_string/stol
очень маленьким шрифтом справа зеленым цветом показано, что требуется С++ 11.
stoi
- это функция С++ 11. Если вы не используете компилятор, который понимает С++ 11, это просто не будет компилироваться.
Вместо этого вы можете использовать stringstream
, чтобы прочитать ввод:
stringstream ss(hours0);
ss >> hours;
stoi доступен "с С++ 11". Убедитесь, что ваш компилятор обновлен.
Вместо этого вы можете использовать atoi (hours0.c_str()).
вместо этой строки -
int hours = stoi(hours0);
напишите это -
int hours = atoi(hours0.c_str());
Ссылка : int atoi (const char * str)
В комментариях в соответствии с другим ответом вы указали, что используете изящную версию g++
под MS Windows.
В этом случае -std=c++11
, как было предложено верхним ответом, все равно не устранит проблему.
См. следующий раздел, который обсуждает вашу ситуацию: std:: stoi не существует в g ++ 4.6.1 на MinGW
Вы используете С++ 11? stoi был добавлен в С++ 11, если вы используете более старую версию, используйте atoi()
Установите последнюю версию TDM-GCC здесь ссылка - http://wiki.codeblocks.org/index.php/MinGW_installation
#include <algorithm>
Включите это, а затем вы можете скомпилировать его с помощью...
g++ -Wall -std = С++ 11 test.cpp -o test
Вы также можете добавить "cd/d% ~ dp0" в качестве первой строки .bat файла в том же каталоге, что и ваш исходный файл, поэтому все, что вам нужно сделать, это двойной щелчок на файле .bat для "автоматизированного" компиляция.
Надеюсь, это поможет!
Добавьте эту опцию: -std=c++11
при компиляции вашего кода
g++ -std=c++11 my_cpp_code.cpp
Мне удалось решить эту проблему, добавив следующие строки в мой 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++,
Это должно позаботиться об ошибках