Rumah pembangunan bahagian belakang C++ Ralat C++: Ahli kelas mesti dimulakan dalam senarai permulaan, bagaimana untuk menanganinya?

Ralat C++: Ahli kelas mesti dimulakan dalam senarai permulaan, bagaimana untuk menanganinya?

Aug 21, 2023 pm 10:24 PM
c++ Laporkan ralat senarai permulaan

Dalam pengaturcaraan C++, jika terdapat pembolehubah ahli dalam definisi kelas yang tidak dimulakan dalam senarai permulaan, pengkompil akan melaporkan ralat "Ahli kelas mesti dimulakan dalam senarai permulaan." Ini bermakna apabila objek dicipta, pembina pembolehubah ahli ini tidak akan dipanggil, dan boleh menyebabkan ketidakstabilan dalam atur cara.

Jadi, dalam C++, apabila mencipta objek kelas, anda mesti menggunakan senarai permulaan sebanyak mungkin. Artikel ini akan memperkenalkan senarai permulaan dan penggunaannya serta cara menyelesaikan ralat yang ahli kelas tidak dimulakan dalam senarai permulaan.

Apakah itu senarai permulaan?

Dalam C++, ahli kelas boleh menjadi jenis data asas, tatasusunan, struktur, kelas, dsb. Apabila mentakrifkan pembolehubah ahli dalam kelas, anda boleh memilih untuk memulakannya dalam badan pembina atau menggunakan senarai permulaan (Senarai Permulaan Pembina).

Senarai permulaan ialah pengepala fungsi pembina Anda boleh menggunakan senarai pemula untuk memulakan ahli sebelum pembina. Ia ialah satu siri operasi pemulaan yang dipisahkan dengan koma selepas titik bertindih (:) sebelum badan pembina. Dalam senarai permulaan, berbilang pembolehubah ahli boleh dimulakan pada masa yang sama, atau pembina lalai boleh digunakan untuk pemula, dengan itu mengelakkan ralat yang disebabkan oleh ahli kelas tidak dimulakan dalam senarai permulaan.

Sintaks adalah seperti berikut:

class SomeClass {
public:
    SomeClass(int a, int b, int c) : var1(a), var2(b), var3(c) {
        //构造函数体中的其它操作
    }
private:
    int var1;
    int var2;
    int var3;
};
Salin selepas log masuk

Dalam contoh ini, SomeClass mempunyai tiga pembolehubah ahli: var1, var2, var3, yang akan dimulakan sebelum pembina dan operasi lain dalam badan pembina akan dilakukan selepas senarai pemula.

Penggunaan senarai permulaan

  1. Inisialisasi ahli objek

Jika terdapat objek lain dalam kelas sebagai ahli kelas, anda juga boleh menggunakan senarai permulaan untuk memulakan ahli ini. Seperti yang ditunjukkan di bawah:

class Person {
public:
    Person(int _age, int _id) : age(_age), id(_id), car("BMW", "blue") {
    }
private:
    int age;
    int id;
    Car car;   //Car 是一个类类型成员
};
Salin selepas log masuk

Dalam contoh ini, kami menggunakan senarai permulaan untuk memulakan pembolehubah ahli umur, id dan kereta. Antaranya, kereta adalah pembolehubah ahli kelas Orang Ia adalah objek jenis Kereta dan diisytiharkan dengan "Kereta kereta". Apabila kita mencipta objek Orang, kita juga perlu memulakan ahli kereta. Apabila menggunakan senarai permulaan, anda perlu menggunakan pembina kelas Kereta untuk memulakan objek.

  1. Permulaan penukaran jenis

Apabila anda perlu menukar satu jenis kepada jenis lain, anda boleh menggunakan senarai permulaan:

class A {
public:
    A(int val) : a(val), b(val*1.2), c(val*1.5) {}
private:
    int a;
    double b;
    float c;
};
Salin selepas log masuk

Dalam contoh ini, nilai jenis int digunakan untuk memulakan operasi penukaran jenis juga mungkin dalam senarai.

  1. Inisialisasi ahli baca sahaja

Kadangkala, pembolehubah ahli dalam kelas perlu dibaca sahaja dan hanya boleh dimulakan apabila objek dicipta dan tidak boleh diubah suai dalam badan pembina. Ini boleh dicapai menggunakan senarai permulaan. Seperti yang ditunjukkan di bawah:

class B {
public:
    B() : a(5), b(2), c(a*b) {}
private:
    const int a;
    const int b;
    const int c;
};
Salin selepas log masuk

Dalam contoh ini, pembolehubah a, b dan c semuanya baca sahaja dan semuanya perlu dimulakan apabila objek dicipta. Memandangkan c ialah hasil darab a dan b, dan kedua-dua a dan b adalah baca sahaja, ia hanya boleh dikendalikan dalam senarai permulaan, dan ungkapan yang diberikan kepadanya tidak boleh diubah suai dalam badan pembina.

Bagaimana untuk menangani ralat "Ahli kelas mesti dimulakan dalam senarai permulaan"?

Jika ahli kelas tidak dimulakan dalam senarai permulaan apabila mencipta objek kelas, pengkompil akan melaporkan ralat "Ahli kelas mesti dimulakan dalam senarai permulaan". Untuk mengelakkan ralat ini, kita boleh mengikuti langkah berikut:

  1. Kenal pasti pembolehubah ahli yang tidak dimulakan.

Dalam pengkompil, mesej ralat akan menunjukkan pembolehubah ahli mana yang tidak dimulakan dalam senarai permulaan. Kita boleh mengikut gesaan untuk mencari pembolehubah ahli yang sepadan dalam kod sumber, seperti:

class Test {
public:
    Test() {
        int a = 0;
        std::string b;
    }
};
Salin selepas log masuk

Dalam kelas Ujian, terdapat dua pembolehubah ahli a dan b. Dalam pembina kelas, kami tidak memulakannya dalam senarai permulaan, itulah sebabnya ralat dilaporkan.

  1. Tambahkan pembolehubah ahli pada senarai permulaan.

Tambahkan pembolehubah ahli yang tidak dimulakan pada senarai permulaan pembina mengikut keperluan. Ubah suai kod pembina kepada:

class Test {
public:
    Test() : a(0), b("") {}
private:
    int a;
    std::string b;
};
Salin selepas log masuk

Dalam contoh ini, kami menggunakan senarai permulaan untuk memulakan pembolehubah ahli a dan b, dengan itu mengelakkan ralat "ahli kelas mesti dimulakan dalam senarai permulaan".

Nota

Dalam C++, menggunakan senarai permulaan bukan sahaja boleh mengelakkan ralat apabila ahli kelas tidak dimulakan dalam senarai permulaan, tetapi juga boleh meningkatkan kecekapan program. Jika pemulaan diperlukan dalam badan pembina, ia boleh menyebabkan pembina ahli kelas dipanggil beberapa kali pada penghujung pembina, tetapi menggunakan senarai permulaan hanya akan memanggilnya sekali, sekali gus meningkatkan kecekapan program.

Selain itu, apabila pembolehubah ahli adalah jenis const, jika ia tidak dimulakan dalam senarai permulaan, pengkompil akan melaporkan ralat. Apabila menggunakan senarai permulaan, anda harus memberi perhatian kepada jenis pembolehubah ahli dan kaedah permulaannya.

Atas ialah kandungan terperinci Ralat C++: Ahli kelas mesti dimulakan dalam senarai permulaan, bagaimana untuk menanganinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah peranan char dalam c strings Apakah peranan char dalam c strings Apr 03, 2025 pm 03:15 PM

Dalam C, jenis char digunakan dalam rentetan: 1. Simpan satu watak; 2. Gunakan array untuk mewakili rentetan dan berakhir dengan terminator null; 3. Beroperasi melalui fungsi operasi rentetan; 4. Baca atau output rentetan dari papan kekunci.

Empat cara untuk melaksanakan multithreading dalam bahasa c Empat cara untuk melaksanakan multithreading dalam bahasa c Apr 03, 2025 pm 03:00 PM

Multithreading dalam bahasa dapat meningkatkan kecekapan program. Terdapat empat cara utama untuk melaksanakan multithreading dalam bahasa C: Buat proses bebas: Buat pelbagai proses berjalan secara bebas, setiap proses mempunyai ruang ingatan sendiri. Pseudo-Multithreading: Buat pelbagai aliran pelaksanaan dalam proses yang berkongsi ruang memori yang sama dan laksanakan secara bergantian. Perpustakaan multi-threaded: Gunakan perpustakaan berbilang threaded seperti PTHREADS untuk membuat dan mengurus benang, menyediakan fungsi operasi benang yang kaya. Coroutine: Pelaksanaan pelbagai threaded ringan yang membahagikan tugas menjadi subtask kecil dan melaksanakannya pada gilirannya.

Cara Mengira C-SubScript 3 Subscript 5 C-SubScript 3 Subscript 5 Algoritma Tutorial Cara Mengira C-SubScript 3 Subscript 5 C-SubScript 3 Subscript 5 Algoritma Tutorial Apr 03, 2025 pm 10:33 PM

Pengiraan C35 pada dasarnya adalah matematik gabungan, yang mewakili bilangan kombinasi yang dipilih dari 3 dari 5 elemen. Formula pengiraan ialah C53 = 5! / (3! * 2!), Yang boleh dikira secara langsung oleh gelung untuk meningkatkan kecekapan dan mengelakkan limpahan. Di samping itu, memahami sifat kombinasi dan menguasai kaedah pengiraan yang cekap adalah penting untuk menyelesaikan banyak masalah dalam bidang statistik kebarangkalian, kriptografi, reka bentuk algoritma, dll.

Fungsi Penggunaan Fungsi Jarak Jarak Jarak Penggunaan C Tutorial Penggunaan Fungsi Penggunaan Fungsi Jarak Jarak Jarak Penggunaan C Tutorial Penggunaan Apr 03, 2025 pm 10:27 PM

STD :: Unik menghilangkan elemen pendua bersebelahan di dalam bekas dan menggerakkannya ke akhir, mengembalikan iterator yang menunjuk ke elemen pendua pertama. STD :: Jarak mengira jarak antara dua iterators, iaitu bilangan elemen yang mereka maksudkan. Kedua -dua fungsi ini berguna untuk mengoptimumkan kod dan meningkatkan kecekapan, tetapi terdapat juga beberapa perangkap yang perlu diberi perhatian, seperti: STD :: Unik hanya berkaitan dengan unsur -unsur pendua yang bersebelahan. STD :: Jarak kurang cekap apabila berurusan dengan Iterator Akses Bukan Rawak. Dengan menguasai ciri -ciri dan amalan terbaik ini, anda boleh menggunakan sepenuhnya kuasa kedua -dua fungsi ini.

Bagaimana cara menggunakan nomenclature ular dalam bahasa c? Bagaimana cara menggunakan nomenclature ular dalam bahasa c? Apr 03, 2025 pm 01:03 PM

Dalam bahasa C, nomenclature ular adalah konvensyen gaya pengekodan, yang menggunakan garis bawah untuk menyambungkan beberapa perkataan untuk membentuk nama pembolehubah atau nama fungsi untuk meningkatkan kebolehbacaan. Walaupun ia tidak akan menjejaskan kompilasi dan operasi, penamaan panjang, isu sokongan IDE, dan bagasi sejarah perlu dipertimbangkan.

Penggunaan Releaseemaphore dalam C Penggunaan Releaseemaphore dalam C Apr 04, 2025 am 07:54 AM

Fungsi Release_semaphore dalam C digunakan untuk melepaskan semaphore yang diperoleh supaya benang atau proses lain dapat mengakses sumber yang dikongsi. Ia meningkatkan kiraan semaphore dengan 1, yang membolehkan benang menyekat untuk meneruskan pelaksanaan.

Masalah dengan versi dev-c Masalah dengan versi dev-c Apr 03, 2025 pm 07:33 PM

DEV-C 4.9.9.2 Kesilapan dan Penyelesaian Penyusunan Apabila menyusun program dalam sistem Windows 11 menggunakan dev-C 4.9.9.2, panel rekod pengkompil boleh memaparkan mesej ralat berikut: gcc.exe: internalerror: dibatalkan (programcollect2) PleaseSubmitafullbugreport.seeforinstructions. Walaupun "kompilasi berjaya", program sebenar tidak dapat dijalankan dan mesej ralat "Arkib kod asal tidak dapat disusun" muncul. Ini biasanya kerana penghubung mengumpul

C dan Pengaturcaraan Sistem: Kawalan Rendah dan Interaksi Perkakasan C dan Pengaturcaraan Sistem: Kawalan Rendah dan Interaksi Perkakasan Apr 06, 2025 am 12:06 AM

C sesuai untuk pengaturcaraan sistem dan interaksi perkakasan kerana ia menyediakan keupayaan kawalan dekat dengan perkakasan dan ciri-ciri kuat pengaturcaraan berorientasikan objek. 1) C melalui ciri-ciri peringkat rendah seperti penunjuk, pengurusan memori dan operasi bit, operasi peringkat sistem yang cekap dapat dicapai. 2) Interaksi perkakasan dilaksanakan melalui pemacu peranti, dan C boleh menulis pemandu ini untuk mengendalikan komunikasi dengan peranti perkakasan.

See all articles