Rumah > pembangunan bahagian belakang > C++ > Mengapa Pembina Tanpa Argumen Saya Menyebabkan Ralat 'Permintaan untuk Ahli'?

Mengapa Pembina Tanpa Argumen Saya Menyebabkan Ralat 'Permintaan untuk Ahli'?

Linda Hamilton
Lepaskan: 2024-12-08 21:26:11
asal
514 orang telah melayarinya

Why Does My No-Argument Constructor Cause a

Ralat Akses Pembina Terlebih dan Ahli Kelas

Pertimbangkan kelas dengan dua pembina, satu tanpa argumen dan satu lagi dengan hujah integer tunggal. Semasa mencipta objek menggunakan fungsi pembina yang terakhir seperti yang dimaksudkan, menggunakan pembina tanpa hujah mengakibatkan ralat.

Sebagai contoh, menyusun coretan kod berikut:

class Foo
{
public:
    Foo() {};
    Foo(int a) {};
    void bar() {};
};

int main()
{
    // This works...
    Foo foo1(1);
    foo1.bar();

    // This fails...
    Foo foo2();
    foo2.bar();

    return 0;
}
Salin selepas log masuk

menjana ralat berikut :

error: request for member 'bar' in 'foo2', which is of non-class type 'Foo ()()'
Salin selepas log masuk

Ralat ini berlaku kerana pengkompil mentafsir kod Foo foo2(); sebagai pengisytiharan fungsi dengan nama 'foo2' dan jenis pulangan 'Foo'. Walau bagaimanapun, anda berhasrat untuk membuat instantiate objek jenis 'Foo' dengan pembina tanpa hujah.

Untuk menyelesaikan isu ini, ubah suai Foo foo2(); kepada Foo foo2;. Perubahan ini memberitahu pengkompil bahawa anda ingin mencipta objek menggunakan pembina lalai.

Sebagai alternatif, anda mungkin menghadapi ralat yang menunjukkan kekaburan dalam pembina terlampau beban kerana kehadiran kedua-dua pembina tanpa hujah dan hujah tunggal . Dalam kes sedemikian, secara eksplisit menggunakan pembina tanpa hujah menggunakan Foo foo2{}; akan menyelesaikan kekaburan.

Atas ialah kandungan terperinci Mengapa Pembina Tanpa Argumen Saya Menyebabkan Ralat 'Permintaan untuk Ahli'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan