Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Mendapat Ralat Pengkompil C2280: \'Percubaan untuk Merujuk Fungsi Dipadam\' dalam Visual Studio?

Mengapa Saya Mendapat Ralat Pengkompil C2280: \'Percubaan untuk Merujuk Fungsi Dipadam\' dalam Visual Studio?

Linda Hamilton
Lepaskan: 2024-10-27 10:31:03
asal
493 orang telah melayarinya

Why Am I Getting Compiler Error C2280:

Ralat Pengkompil C2280: Menyelesaikan "Percubaan untuk Merujuk Fungsi Dipadam" dalam Visual Studio

Isu

Visual Studio 2013 menyusun kod berikut tanpa ralat:

<code class="cpp">class A {
public:
   A(){}
   A(A &amp;&amp;){}
};

int main(int, char*) {
   A a;
   new A(a);
   return 0;
}</code>
Salin selepas log masuk

Walau bagaimanapun, Visual Studio 2015 RC menghadapi ralat C2280:

1>c:\dev\foo\foo.cpp(11): error C2280: 'A::A(const A &amp;)': attempting to reference a deleted function
1>  c:\dev\foo\foo.cpp(6): note: compiler has generated 'A::A' here
Salin selepas log masuk

Sebab

Dalam C 11, jika definisi kelas tidak mengisytiharkan secara eksplisit pembina salinan, pengkompil secara tersirat menghasilkan satu. Walau bagaimanapun, jika kelas mentakrifkan pembina alih atau pengendali tugasan pindah tanpa menyediakan juga pembina salinan eksplisit, pembina salinan tersirat ditakrifkan sebagai =delete. Ini adalah untuk menguatkuasakan Peraturan Lima, yang menghalang penghirisan tidak disengajakan apabila menyalin objek antara kelas asas dan terbitan yang berbeza.

Penyelesaian

Untuk menyelesaikan ralat C2280, anda mesti mengisytiharkan pembina salinan secara eksplisit jika anda mahu kelas boleh disalin. Berikut ialah dua pilihan:

  1. Tentukan dan padamkan pembina salinan secara eksplisit:

    <code class="cpp">class A {
    public:
       explicit A(){}
       A(A &amp;&amp;){}
       A(const A&amp;) = delete;
    };</code>
    Salin selepas log masuk
  2. Secara eksplisit sediakan dan lalai pembina salinan:

    <code class="cpp">class A {
    public:
       explicit A(){}
       A(A &amp;&amp;){}
       A(const A&amp;) = default;
       A&amp; operator=(const A&amp;) = default;
    };</code>
    Salin selepas log masuk

Dalam pendekatan kedua, anda juga perlu menyediakan operator penugasan pindah secara jelas dan pertimbangkan untuk mengisytiharkan pemusnah untuk mengikut Peraturan daripada Lima.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat Pengkompil C2280: \'Percubaan untuk Merujuk Fungsi Dipadam\' dalam Visual Studio?. 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