Linux, gcc 5.3 und stoi

_maxe

PC-Selbstbauer(in)
Hallo an alle,

bin momentan dabei etwas C++ zu lernen und schreibe gerade an einem Programm wo ich den Input in einem String speichere.
Dieser soll an manchen Stellen mit der stoi Funktion in einen int vector geschrieben werden.

Nun habe ich aber das Problem das, obwohl ich die string.h included habe, er die stoi-Funktion einfach nicht findet :wall:
Als Meldung bekomm ich jedesmal
'stoi' was not declared in this scope

Wie im Titel zu sehen ist, ich habe auf meinem Linux System die gcc Version 5.3, die auch C++11 Support hat. Dieser wird benötigt für die stoi Funktion.

Ich kompiliere meine .C Datein über die Kommandozeile mit
gcc -std=c++11 prog/c++/programm.C -o programm
Andere String Funktionen klappen ohne Problem. Nur stoi will nicht.

Hat da jemand einen Rat? Irgendwas was ich vielleicht übersehe?

Gruß maxe

edit: Vielleicht noch ein Auszug aus dem Programm:
Code:
string temp; 
int dec_temp;
getline(cin,temp);

if(temp.find("/")<temp.length()){
  for(int i=temp.find("/");i<=temp.length();i++){
    dec_temp= stoi(temp[i]);
    dec_mask.push_back(dec_temp);
  }
}

und

Code:
#include <vector> 
#include <iostream> 
#include <string> 
using namespace std;
 
Zuletzt bearbeitet:
Hast du es mal mit g++ versucht? gcc ist der C Compiler für *.c Dateien. g++ für C++ mit *.cpp (*.cxx) Dateien.

Bei mir funktioniert folgender Code einwandfrei (gcc 5.3.1):
Code:
// g++ -o prog -std=c++11 main.cpp

#include <string>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
    string test("1234");
    int v = stoi(test);
    cout << v << endl;

    return 0;
}
Was bei dir eventuell noch Probleme macht: Dein temp liefert ein char, das stoi erwartet aber einen std::string als Argument. int v = stoi('1') funktioniert beispielsweise nicht.
 
Zuletzt bearbeitet:
Danke für die schnelle Rückmeldung.
Das mein temp nur einen char-Wert zurückliefert war mir nicht bewusst.
Auch das stoi dann nicht funktioniert.
Ob es nun daran lag oder nicht, keine Ahnung.

Ich habe noch ein Übungsprogramm wo ich aus einem char den Wert geholt habe und diesen in eine int Variable gepackt habe.
Da dies aber nicht sofort funktionierte, dachte ich, ich bräuchte was für strings. temp ist ja schließlich als solcher deklariert worden.
Als ich es eben nochmal versuchte merkte ich das meine Schleifen-Dimensionierung auch garnicht richtig tut, deshalb klappte es auch vorher nicht^^.

Hier nun so wie's funktioniert:
Code:
getline(cin,temp);

if(temp.find("/")<temp.length()){
  for(int i=temp.find("/")+1;i<temp.length();i++){
    dec_temp=(temp[i]-'0');
    dec_mask.push_back(dec_temp);
  }
}

Danke für die hilfe. Ich dachte es würde am Compiler liegen(falsche Version o.ä) oder das ich noch was nachinstallieren muss auf meinem System.

Gruß maxe
 
Zuletzt bearbeitet von einem Moderator:
Zurück