Simple Code Need Help - ไม่มีอินสแตนซ์ของ Constructor ที่ตรงกับรายการอาร์กิวเมนต์

ฉันกำลังติดตามหนังสือเกี่ยวกับการเขียนโปรแกรม C++ และติดอยู่กับเวกเตอร์ ตัวอย่างจากหนังสือไป:

vector<int> v = {1,2,3};

แต่ฉันได้รับข้อผิดพลาด:

    1   IntelliSense: no instance of constructor "Vector<T>::Vector [with T=int]" matches the argument list
        argument types are: (int, int, int) ../path

นอกจากนี้ เมื่อฉันสร้างเวกเตอร์สตริง:

vector<string> v = {"one", "two", "three"}

ฉันได้รับข้อผิดพลาดนี้:

    1   IntelliSense: no instance of constructor "Vector<T>::Vector [with T=std::string]" matches the argument list
        argument types are: (const char [4], const char [4], const char [6]) ../path

ฉันใช้ VS 2013 กับคอมไพเลอร์ CTP เดือนพฤศจิกายน 2013 ผมทำอะไรผิดหรือเปล่า?


person user3650284    schedule 09.08.2014    source แหล่งที่มา
comment
คุณ#include <vector>ใช่ไหม?   -  person Brian Bi    schedule 09.08.2014
comment
Vector<T> ฉันหมายถึงอะไรด้วยตัวพิมพ์ใหญ่ V?   -  person 101010    schedule 09.08.2014
comment
ใช่ ฉัน #include ‹vector› แล้ว ฉันไม่รู้จริงๆว่าข้อความแสดงข้อผิดพลาดเหล่านี้หมายถึงอะไร ฉันเป็นมือใหม่   -  person user3650284    schedule 09.08.2014
comment
ลอง std::vector<int> v = {1,2,3}; และ std::vector<std::string> v = {"one", "two", "three"}; แล้วรายงานกลับ   -  person 101010    schedule 09.08.2014
comment
ฉันเดาว่า การเขียนโปรแกรม: หลักการและแนวทางปฏิบัติโดยใช้ C++ ของ Bjarne Stroustrup คืออะไร   -  person T.C.    schedule 09.08.2014
comment
ฉันลองตัวอย่าง 40two และอันแรกใช้งาน int แต่อันที่สองให้สตริงตัวระบุข้อผิดพลาดไม่ได้กำหนด และใช่ นั่นคือหนังสือ   -  person user3650284    schedule 09.08.2014
comment
ตรวจสอบให้แน่ใจว่าคุณใช้ เวอร์ชันนี้ของส่วนหัว "std_lib_facilities.h" ของเขา   -  person T.C.    schedule 09.08.2014
comment
ฉันดาวน์โหลด std_lib_facilities.h อีกครั้ง และเช่นนั้น ตอนนี้ทุกอย่างทำงานได้เหมือนความฝัน ขอบคุณ   -  person user3650284    schedule 09.08.2014
comment
@ 40two การแฮ็กมาโครที่น่าขยะแขยงโจมตีอีกครั้ง ... (ส่วนหัวของ Bjarne มี #define vector Vector อยู่ในนั้น ซึ่งได้สร้างคำถาม SO มาระยะหนึ่งแล้ว)   -  person T.C.    schedule 09.08.2014
comment
@ที.ซี. ฉันควรแก้ไขไฟล์ส่วนหัวหรือปล่อยทิ้งไว้?   -  person user3650284    schedule 09.08.2014
comment
@ user3650284 คุณสามารถใช้ส่วนหัวเวอร์ชันใหม่ได้หากคุณกำลังเรียนรู้ C ++ โดยใช้หนังสือ เขาใช้โครงสร้างแบบแฮ็กในส่วนหัวนั้นเพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้นสำหรับผู้เรียนครั้งแรก   -  person T.C.    schedule 09.08.2014
comment
@T.C ดูเหมือนอย่างนั้น ฉันมีหนังสือเล่มเดียวกันเพียงเพื่อตกแต่งชั้นหนังสือของฉัน อ่านบทแรกแล้วเลิกเลย   -  person 101010    schedule 09.08.2014
comment
@40two ทำไมเป็นอย่างนั้นล่ะ? คุณมีคำแนะนำอื่น ๆ (หนังสือ) หรือไม่?   -  person user3650284    schedule 09.08.2014
comment
@ user3650284 เป็นหนังสือที่ดี แต่กลุ่มเป้าหมายหลักคือโปรแกรมเมอร์มือใหม่มากกว่าผู้ที่มีประสบการณ์ หากคุณกำลังมองหาหนังสือแนะนำเพิ่มเติม โปรดดูรายการนี้   -  person T.C.    schedule 09.08.2014
comment
@ user3650284 Bjarne ใช้สิ่งที่กำหนดเองมากมายในหนังสือเล่มนี้ ฉันไม่ชอบมันเพราะฉันเคยติดภาษา C++ มาก่อนตอนที่ซื้อมัน ฉันกำลังมองหาคำแนะนำ C++ แบบมืออาชีพมากกว่านี้ ในความคิดของฉันสำหรับผู้เริ่มต้น ไพรเมอร์ C++ ดีกว่า   -  person 101010    schedule 09.08.2014


คำตอบ (2)


หากต้องการสรุปและขยายความเกี่ยวกับสิ่งที่เขียนไว้ในความคิดเห็นและส่วนหัว "std_lib_facilities.h" ของ Bjarne Stroustrup:

  • ส่วนหัวประกอบด้วยคลาสเวกเตอร์ที่ตรวจสอบช่วงเล็กน้อยที่เรียกว่า Vector เพื่อวัตถุประสงค์ในการสอน
  • หากต้องการทำให้ Vector เป็นการแทนที่ "ไร้รอยต่อ" สำหรับ vector ในไลบรารีมาตรฐาน (อีกครั้งเพื่อวัตถุประสงค์ในการสอน) ส่วนหัวจะมีบรรทัดต่อไปนี้:

    // disgusting macro hack to get a range checked vector:
    #define vector Vector
    
  • OP น่าจะใช้ส่วนหัวสำหรับหนังสือฉบับพิมพ์ครั้งแรก (เป็นผลการค้นหาอันดับต้นๆ ของ Google สำหรับ std_lib_facilities.h) ซึ่ง Vector ไม่มีตัวสร้าง initializer_list (ฉบับนั้นใช้ C++98 ซึ่งไม่มีรายการตัวเริ่มต้น) .
  • ด้วยเหตุนี้ คอมไพลเลอร์จึงบ่นว่า Vector ไม่มีตัวสร้างที่ตรงกันเมื่อเห็น vector<int> v = {1,2,3}; ซึ่งจะกลายเป็น Vector<int> v = {1,2,3}; หลังจากการแทนที่แมโคร

หากต้องการแก้ไขปัญหา ให้ดาวน์โหลดและใช้ส่วนหัวเวอร์ชันที่ถูกต้อง

person T.C.    schedule 09.08.2014

ลอง #include <string> เพื่อกำหนดสตริง และ using namespace std;

บรรทัดสุดท้ายให้คุณข้าม std:: ข้างหน้าเนื้อหาได้

person robbannn    schedule 09.08.2014