Mengapa saya mendapat ralat \'Rujukan tidak ditentukan kepada \'Bar::kConst\'\' apabila menggunakan ahli const int statik dalam fungsi?

Susan Sarandon
Lepaskan: 2024-10-30 19:29:03
asal
857 orang telah melayarinya

Why do I get an

Rujukan Tidak Ditakrifkan kepada Static const int

Soalan:

Pertimbangkan kod berikut:

<code class="cpp">class Bar {
public:
  static const int kConst = 1;
  void func() { foo(kConst); }
};

int main() { Bar b; b.func(); }</code>
Salin selepas log masuk

Semasa menyusun kod ini, ralat berlaku: "Rujukan tidak ditentukan kepada 'Bar::kConst'". Mengapa ini berlaku, dan bagaimanakah ia boleh diselesaikan?

Jawapan:

Ralat ini berlaku kerana ahli const int statik, jika digunakan (diteruskan ke fungsi atau hantar) , mesti ditakrifkan dalam skop ruang nama.

Menurut bahagian C 11 9.4.2/4:

"Jika ahli data statik adalah daripada jenis kamiran const atau const enumeration, pengisytiharannya dalam takrifan kelas boleh menentukan pemalar-pemula yang hendaklah menjadi ungkapan pemalar integral Dalam kes itu, ahli boleh muncul dalam ungkapan pemalar integral Ahli itu akan tetap ditakrifkan dalam skop ruang nama jika ia digunakan dalam atur cara . ... atau ialah operan pengendali taip dan ... tidak menetapkan nilai jenis kelas polimorfik Objek atau fungsi tidak terlebih beban digunakan jika namanya muncul dalam ungkapan yang berpotensi dinilai."

<.>Walau bagaimanapun, GCC pada mulanya membenarkan menghantar ahli const statik melalui rujukan const tanpa mentakrifkan mereka dalam skop ruang nama. Dalam draf C 0x, ini tidak lagi dibenarkan.

Isu praktikal timbul apabila mengambil alamat atau rujukan kepada objek yang tidak wujud seperti ahli const statik. Ini boleh membawa kepada gelagat yang tidak ditentukan jika ia dipanggil daripada berbilang unit terjemahan.

Untuk menyelesaikan isu ini, pengubahsuaian berikut boleh dibuat:

Tentukan ahli const statik dalam skop ruang nama:

  • Gunakan static_cast(kConst) untuk memaksa pengkompil membuat objek int sementara dan memberikan rujukan kepadanya:

    <code class="cpp">int bar::kConst = 1;</code>
    Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa saya mendapat ralat \'Rujukan tidak ditentukan kepada \'Bar::kConst\'\' apabila menggunakan ahli const int statik dalam fungsi?. 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