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
Linda Hamiltonasal
2024-12-08 21:26:11519semak imbas

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;
}

menjana ralat berikut :

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

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!

Kenyataan:
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