Rumah pembangunan bahagian belakang C++ Ralat kompilasi C++: ahli statik tidak boleh dimulakan dengan ungkapan malar, bagaimana untuk menyelesaikannya?

Ralat kompilasi C++: ahli statik tidak boleh dimulakan dengan ungkapan malar, bagaimana untuk menyelesaikannya?

Aug 22, 2023 am 08:13 AM
ralat penyusunan c++ ahli statik permulaan ungkapan berterusan

Dalam pengaturcaraan C++, ahli statik ialah sifat awam kelas Mereka boleh diakses tanpa bergantung pada objek tertentu, kerana kitaran hayatnya adalah sama dengan kelas, dengan hanya satu salinan. Tetapi apabila menggunakan ahli statik, kadangkala anda akan menghadapi ralat kompilasi yang ahli statik tidak boleh dimulakan dengan ungkapan tetap. Jadi bagaimana ralat ini berlaku dan bagaimana untuk menyelesaikannya? Artikel ini akan memperkenalkannya dari dua aspek.

1. Sebab ahli statik tidak boleh dimulakan dengan ungkapan malar

Dalam standard C++11, konsep constexpr ungkapan malar diperkenalkan, yang merujuk kepada ungkapan yang hasilnya boleh dikira pada masa penyusunan. Pemalar boleh ditakrifkan menggunakan constexpr, sebagai contoh:

constexpr int max(int a, int b) {
    return a > b ? a : b;
}
Salin selepas log masuk

Apabila menggunakan fungsi ini, pengkompil boleh mengira hasil pada masa penyusunan, jadi max(1, 2) boleh dianggap sebagai ungkapan malar. Hasilnya ialah 2. Tetapi apabila menggunakan ahli statik, jika anda cuba menggunakan ungkapan malar untuk memulakan pembolehubah ahli statik, ralat kompilasi akan berlaku. Contohnya:

class MyClass {
public:
    static constexpr int m_value = 10; // 编译错误
};
Salin selepas log masuk

Ini kerana susunan pemulaan ahli statik berkaitan dengan susunan penilaian ungkapan malar. Dalam C++, susunan permulaan ahli statik adalah dalam susunan pengisytiharan, dan ungkapan malar dinilai pada masa penyusunan, jadi jika ahli statik bergantung pada ungkapan malar, ia mesti dijamin untuk dimulakan selepas ungkapan malar. . a Ungkapan pemalar khas yang hanya melibatkan literal integer, pengendali aritmetik dan fungsi atau ahli tanpa kesan sampingan. Untuk pembolehubah ahli statik, anda boleh menggunakan ungkapan pemalar integer untuk memulakan, contohnya:

class MyClass {
public:
    static const int m_value = 10; // 正确
};
Salin selepas log masuk

Untuk jenis pembolehubah ahli statik yang lain, anda juga boleh menggunakan kaedah ini, cuma pastikan anda menggunakan ungkapan pemalar integer untuk pemula.

2. Gunakan pembolehubah sebaris

Dalam piawaian C++17, konsep pembolehubah sebaris diperkenalkan, yang membolehkan pembolehubah ditakrifkan dalam fail pengepala tanpa menyebabkan masalah definisi berbilang. Untuk pembolehubah ahli statik, anda boleh menggunakan pembolehubah sebaris untuk memulakan, contohnya:

class MyClass {
public:
    inline static int m_value = 10; // 正确
};
Salin selepas log masuk

Menggunakan pembolehubah sebaris boleh mengelakkan masalah bahawa ahli statik tidak boleh dimulakan dengan ungkapan malar Ia juga lebih mudah dan tidak perlu mentakrifkan pembolehubah secara berasingan fail sumber. . rujukan dan kemudian memulakannya apabila anda perlu menggunakan pembolehubah ahli statik boleh mengelakkan masalah bahawa ahli statik tidak boleh dimulakan dengan ungkapan malar. Kelebihan pendekatan ini ialah anda boleh mengawal pemasaan permulaan pembolehubah ahli statik secara fleksibel mengikut keperluan, sambil juga mengelakkan pengamulaan yang tidak perlu apabila program bermula. . Sebab masalah ini ialah susunan permulaan ahli statik berkaitan dengan susunan penilaian ungkapan malar. Untuk menyelesaikan masalah ini, anda boleh menggunakan ungkapan pemalar integer untuk memulakan ahli statik, menggunakan pembolehubah sebaris untuk memulakan ahli statik atau menggunakan pengamulaan malas untuk mengelakkan masalah bahawa ahli statik tidak boleh dimulakan dengan ungkapan malar. Kaedah yang mana untuk dipilih bergantung pada situasi tertentu dan perlu dipilih secara fleksibel berdasarkan keperluan sebenar.

Atas ialah kandungan terperinci Ralat kompilasi C++: ahli statik tidak boleh dimulakan dengan ungkapan malar, bagaimana untuk menyelesaikannya?. 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)

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'tiada fungsi yang sepadan untuk panggilan ke 'fungsi'? Bagaimana untuk menyelesaikan ralat kompilasi C++: 'tiada fungsi yang sepadan untuk panggilan ke 'fungsi'? Aug 25, 2023 pm 04:31 PM

Selesaikan ralat kompilasi C++: 'nomatchingfunctionforcallto'function'', bagaimana untuk menyelesaikannya? Apabila menulis atur cara dalam C++, kita sering menghadapi pelbagai ralat kompilasi. Salah satu ralat biasa ialah "fungsi nomatchingforcallto'function'". Ralat ini biasanya berlaku apabila fungsi dipanggil dan pengkompil tidak dapat mencari pengisytiharan atau definisi fungsi yang sepadan. Buku

Selesaikan ralat kompilasi C++: 'jenis tidak serasi', bagaimana untuk menyelesaikannya? Selesaikan ralat kompilasi C++: 'jenis tidak serasi', bagaimana untuk menyelesaikannya? Aug 25, 2023 pm 05:13 PM

Selesaikan ralat kompilasi C++: 'incompatibletypes', bagaimana untuk menyelesaikannya? Semasa proses pembangunan C++, kita sering menghadapi mesej ralat yang diberikan oleh pengkompil. Satu jenis ralat biasa ialah "incompatibletypes". Mesej ralat ini menunjukkan bahawa terdapat jenis ketidakpadanan dalam program, yang mungkin jenis pembolehubah tidak konsisten, jenis parameter fungsi tidak sepadan, dsb. Artikel ini akan memperkenalkan beberapa ralat ketidakserasian jenis biasa dan memberikan penyelesaian yang sepadan.

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'definisi semula 'fungsi'? Bagaimana untuk menyelesaikan ralat kompilasi C++: 'definisi semula 'fungsi'? Aug 27, 2023 pm 02:27 PM

Selesaikan ralat kompilasi C++: 'redefinitionof'function'', bagaimana untuk menyelesaikannya? Sebagai bahasa pengaturcaraan yang berkuasa, C++ sering digunakan secara meluas dalam pembangunan perisian. Walau bagaimanapun, menulis program C++ tanpa ralat tidak mudah untuk pemula. Salah satu ralat biasa ialah "redefinitionof'function'", yang merupakan ralat definisi semula fungsi. Dalam artikel ini saya akan menerangkan punca-punca ralat ini dan cara membetulkannya. Sebab ralat

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'lebihan samar-samar untuk 'fungsi'? Bagaimana untuk menyelesaikan ralat kompilasi C++: 'lebihan samar-samar untuk 'fungsi'? Aug 26, 2023 pm 12:30 PM

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'ambiguousoverloadfor'function''? Apabila pengaturcaraan dalam C++, kita sering menghadapi ralat kompilasi. Antaranya, ralat biasa ialah 'ambiguousoverloadfor'function' Ralat ini mengingatkan kita bahawa terdapat kekaburan dalam fungsi lebihan semasa memanggil fungsi. Artikel ini akan menerangkan punca ralat ini dan menyediakan beberapa penyelesaian untuk menyelesaikannya. Pertama, biarkan

Ralat kompilasi C++: Takrif pendua parameter fungsi, bagaimana untuk menyelesaikannya? Ralat kompilasi C++: Takrif pendua parameter fungsi, bagaimana untuk menyelesaikannya? Aug 22, 2023 pm 12:33 PM

Sebagai bahasa pengaturcaraan yang cekap, C++ digunakan secara meluas dalam pelbagai bidang kerana kebolehpercayaannya. Walau bagaimanapun, dalam proses menulis kod, kita sering menghadapi beberapa ralat kompilasi, dan takrifan berulang parameter fungsi adalah salah satu daripadanya. Artikel ini akan memperincikan sebab dan penyelesaian untuk menentukan parameter fungsi berulang kali. Apakah yang mentakrifkan parameter fungsi berulang kali? Dalam pengaturcaraan C++, parameter fungsi merujuk kepada pembolehubah atau ungkapan yang muncul dalam definisi dan pengisytiharan fungsi dan digunakan untuk menerima parameter sebenar yang diluluskan apabila fungsi dipanggil. Apabila mentakrifkan senarai hujah fungsi, setiap hujah mestilah

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'pengasasan tidak sah rujukan jenis 'jenis&' daripada ungkapan jenis 'jenis''? Bagaimana untuk menyelesaikan ralat kompilasi C++: 'pengasasan tidak sah rujukan jenis 'jenis&' daripada ungkapan jenis 'jenis''? Aug 25, 2023 pm 11:43 PM

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'invalidinitializationofreferenceoftype'type&'fromexpressionoftype'type''? Latar belakang masalah: Dalam pengaturcaraan C++, kadangkala kita menghadapi ralat kompilasi. Salah satunya ialah mesej ralat "invalidinitializationofreferenceof

Ralat kompilasi C++: pelbagai definisi, bagaimana untuk mengubah suainya? Ralat kompilasi C++: pelbagai definisi, bagaimana untuk mengubah suainya? Aug 21, 2023 pm 11:07 PM

Dalam pengaturcaraan C++, ralat penyusunan "berbilang definisi" (berbilang definisi) sering berlaku. Ini kerana berbilang pembolehubah, fungsi atau objek dengan nama yang sama ditakrifkan dalam atur cara. Pembolehubah, fungsi atau objek ini semuanya dianggap sama oleh pengkompil, jadi pengkompil akan menjana ralat "definisi berbilang". Dalam pengaturcaraan sebenar, bagaimana kita harus mengelakkan dan menyelesaikan masalah sedemikian? Menggunakan fail pengepala dalam C++, kita boleh menukar beberapa fungsi atau pembolehubah yang digunakan semula ke dalam

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'rujukan tidak ditentukan kepada 'ruang nama::fungsi''? Bagaimana untuk menyelesaikan ralat kompilasi C++: 'rujukan tidak ditentukan kepada 'ruang nama::fungsi''? Aug 26, 2023 pm 11:01 PM

Selesaikan ralat kompilasi C++: 'undefinedreferenceto'namespace::function'', bagaimana untuk menyelesaikannya? Apabila menulis atur cara dalam C++, kita sering menghadapi beberapa ralat kompilasi. Salah satu ralat biasa ialah 'undefinedreferenceto'namespace::function', yang bermaksud bahawa takrifan fungsi tidak boleh ditemui semasa fasa pemautan. Ralat ini biasanya berlaku apabila kami memanggil sumber lain

See all articles