จะใช้ C ++ 11 std :: stoi กับ gcc ได้อย่างไร [ทำซ้ำ]

รายการซ้ำที่เป็นไปได้:
วิธีการแปลงตัวเลขเป็นสตริงและในทางกลับกันใน C++

ฉันใช้ Qt Creator 2.5.0 และ gcc 4.7 (Debian 4.7.2-4) ฉันเพิ่ม "QMAKE_CXXFLAGS += -std=c++11" ลงในไฟล์ .pro ดูเหมือนว่าทุกอย่างจะโอเค ฉันใช้ C++11 std::for_each และอื่นๆ แต่เมื่อฉันรวมส่วนหัว "string" และต้องการใช้ stoi ฉันได้รับข้อผิดพลาดต่อไปนี้:

performer.cpp:336: error: 'std::string' has no member named 'stoi'

ฉันพบคำถามบางข้อที่เกี่ยวข้องกับ MinGW และ เพิ่มเติม หนึ่งรายการ เพื่อ Eclipse CDT และพวกเขาก็ได้รับคำตอบแล้ว แต่ฉันใช้ Linux ทำไมมันใช้งานไม่ได้ที่นี่?


person Razorfever    schedule 27.11.2012    source แหล่งที่มา
comment
คุณสามารถแสดงบรรทัดโค้ดที่ทำให้เกิดข้อผิดพลาดนี้ได้หรือไม่   -  person Praetorian    schedule 27.11.2012
comment
คุณกำลังลองบางอย่างเช่น string.stoi(...) หรือไม่? มันควรจะเป็น std::stoi(string, ...);   -  person zch    schedule 27.11.2012
comment
คุณควรจะโพสต์รหัสเพิ่มเติม :)   -  person aldo.roman.nurena    schedule 27.11.2012
comment
@KillianDS มาเลย .. stoi ถูกกล่าวถึงในโพสต์นั้นในคำตอบอัปเดตเท่านั้น มันไม่ได้ให้ตัวอย่างด้วยซ้ำ คำถามนี้เป็นเกี่ยวกับวิธีการใช้งาน เป็นปัญหาทางไวยากรณ์   -  person aldo.roman.nurena    schedule 28.11.2012
comment
@ aldo.roman.nurena จริง ๆ แล้วชื่อที่แน่นอนของคำถามนี้เกี่ยวกับวิธีใช้ std::stoi (โดยเฉพาะอย่างยิ่งวิธีที่คุณเรียกมัน) ซึ่งมีคำตอบอยู่ที่นั่น   -  person KillianDS    schedule 28.11.2012


คำตอบ (2)


#include <iostream>
#include <string>

int main()
{
    std::string test = "45";
    int myint = stoi(test);
    std::cout << myint << '\n';
}

or

#include <iostream>
#include <string>

using namespace std    

int main()
{
    string test = "45";
    int myint = stoi(test);
    cout << myint << '\n';
}

ดูที่ http://en.cppreference.com/w/cpp/string/basic_string/stol

person aldo.roman.nurena    schedule 27.11.2012
comment
ขอบคุณมาก. ดูเหมือนจะเป็นคำถามที่ค่อนข้างงี่เง่า แต่อย่างไรก็ตาม ฉันหวังว่ามันจะช่วยให้คนอื่นไม่ถามอีกในอนาคต :D - person Razorfever; 27.11.2012
comment
เมื่อฉันคอมไพล์ด้วย g++ -std=c++11 stoi ไม่จำเป็นต้องระบุเนมสเปซเหมือนตัวอย่างบนสุดของคุณ cppreference.com แสดงรายการที่มีอยู่ในเนมสเปซมาตรฐาน แต่มีตัวอย่างเดียวกันกับที่คุณโพสต์ที่นี่ บางคนจะรู้ได้อย่างไรว่าสมาชิกของ std เนมสเปซคนใดไม่ต้องการคุณสมบัติ std - person Chad Skeeters; 25.01.2013
comment
@Chad Skeeters: หากไม่มี using namespace std สมาชิกทั้งหมดของ std เนมสเปซจะต้องมีคุณสมบัติ std เว้นแต่ สามารถพบได้โดย การค้นหาชื่อที่ขึ้นกับอาร์กิวเมนต์ (ADL) ADL คือสาเหตุที่โค้ดนี้คอมไพล์โดยไม่มี using namespace std และไม่มี std:: เป็นหัวข้อที่ค่อนข้างกว้าง ซึ่งขอบของความคิดเห็นนี้แคบเกินกว่าจะบรรจุได้ ลองค้นหาดูครับ มีข้อมูลมากมายในเน็ต - person AnT; 04.03.2014

std::stoi เป็นฟังก์ชันที่ขอบเขตเนมสเปซ โดยรับสตริงเป็นอาร์กิวเมนต์:

std::string s = "123";
int i = std::stoi(s);

จากข้อความแสดงข้อผิดพลาด ดูเหมือนว่าคุณคาดว่าจะเป็นสมาชิกของ string ซึ่งเรียกว่า s.stoi() (หรืออาจเป็น std::string::stoi(s)) นั่นไม่ใช่กรณี หากไม่เป็นปัญหา โปรดโพสต์โค้ดที่มีปัญหา เพื่อที่เราจะได้ไม่ต้องเดาว่ามีอะไรผิดปกติ

person Mike Seymour    schedule 27.11.2012