Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
Linda Hamiltonasal
2024-10-27 10:31:03397semak imbas

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>

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

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

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!

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