Kode Sederhana Butuh Bantuan - tidak ada contoh konstruktor yang cocok dengan daftar argumen

Saya mengikuti buku tentang pemrograman C++ dan saya terjebak pada vektor. Contoh dari buku tersebut berbunyi:

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

tapi saya mendapatkan pesan kesalahan:

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

Juga, ketika saya membuat vektor string:

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

Saya mendapatkan kesalahan ini:

    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

Saya menggunakan VS 2013 dengan kompiler CTP November 2013. Apa yang saya lakukan salah?


person user3650284    schedule 09.08.2014    source sumber
comment
Apakah kamu #include <vector>?   -  person Brian Bi    schedule 09.08.2014
comment
Apa itu Vector<T>, maksudku dengan huruf kapital V?   -  person 101010    schedule 09.08.2014
comment
Ya, saya melakukan #include ‹vector›. Saya benar-benar tidak tahu apa maksud pesan kesalahan ini, saya pemula.   -  person user3650284    schedule 09.08.2014
comment
Coba std::vector<int> v = {1,2,3}; dan std::vector<std::string> v = {"one", "two", "three"}; dan laporkan kembali.   -  person 101010    schedule 09.08.2014
comment
Coba saya tebak, apakah buku ini Pemrograman: Prinsip dan Praktik Menggunakan C++ karya Bjarne Stroustrup?   -  person T.C.    schedule 09.08.2014
comment
Saya mencoba contoh 40two, dan yang pertama dengan int berfungsi, tetapi yang kedua memberikan kesalahan string pengidentifikasi tidak terdefinisi. Dan ya, itu bukunya.   -  person user3650284    schedule 09.08.2014
comment
Pastikan Anda menggunakan versi ini dari header "std_lib_facilities.h" miliknya.   -  person T.C.    schedule 09.08.2014
comment
Saya mengunduh std_lib_facilities.h lagi, dan begitu saja, sekarang semuanya berjalan seperti mimpi. Terima kasih.   -  person user3650284    schedule 09.08.2014
comment
@40two Peretasan makro yang menjijikkan menyerang lagi...(Header Bjarne memiliki #define vector Vector di dalamnya, yang telah menimbulkan pertanyaan SO untuk sementara waktu.)   -  person T.C.    schedule 09.08.2014
comment
@T.C. Haruskah saya mengedit file header, atau membiarkannya saja?   -  person user3650284    schedule 09.08.2014
comment
@ user3650284 Anda cukup menggunakan header versi baru jika Anda mempelajari C++ menggunakan buku. Dia menggunakan beberapa konstruksi hackish di header itu untuk menyederhanakan berbagai hal bagi pelajar pertama kali.   -  person T.C.    schedule 09.08.2014
comment
@T.C Tampak seperti itu. Saya memiliki buku yang sama hanya untuk menghiasi rak buku saya. Baca bab pertama dan keluar.   -  person 101010    schedule 09.08.2014
comment
@40two Mengapa demikian? Apakah Anda punya rekomendasi (buku) lain?   -  person user3650284    schedule 09.08.2014
comment
@ user3650284 Ini buku yang bagus, tetapi target pembaca utamanya adalah pemrogram pemula, bukan pemrogram berpengalaman. Jika Anda mencari rekomendasi buku tambahan, lihat daftar ini   -  person T.C.    schedule 09.08.2014
comment
@ user3650284 Bjarne menggunakan banyak hal khusus dalam buku ini. Saya tidak menyukainya karena saya sudah kecanduan C++ ketika saya membelinya. Saya sedang mencari arahan C++ yang lebih profesional. Menurut saya untuk pemula C++ primer lebih baik.   -  person 101010    schedule 09.08.2014


Jawaban (2)


Untuk meringkas dan memperluas apa yang ditulis dalam komentar dan header "std_lib_facilities.h" Bjarne Stroustrup:

  • Header berisi kelas vektor yang diperiksa rentangnya yang disebut Vector untuk tujuan pengajaran;
  • Untuk menjadikan Vector pengganti yang "mulus" untuk vector di perpustakaan standar (sekali lagi, untuk tujuan pengajaran), header berisi baris berikut:

    // disgusting macro hack to get a range checked vector:
    #define vector Vector
    
  • OP kemungkinan menggunakan tajuk untuk edisi pertama buku tersebut (ini adalah hasil pencarian Google teratas untuk std_lib_facilities.h), yang Vector tidak memiliki konstruktor initializer_list (edisi tersebut menggunakan C++98, yang tidak memiliki daftar penginisialisasi) .
  • Akibatnya, kompiler mengeluh bahwa Vector tidak memiliki konstruktor yang cocok ketika melihat vector<int> v = {1,2,3};, yang menjadi Vector<int> v = {1,2,3}; setelah penggantian makro.

Untuk memperbaiki masalah ini, unduh dan gunakan versi header yang benar.

person T.C.    schedule 09.08.2014

Cobalah #include <string> untuk mendefinisikan string. Dan using namespace std;

Baris terakhir memungkinkan Anda melewati std:: di depan sesuatu.

person robbannn    schedule 09.08.2014