Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa saya mendapat ralat \"Rujukan tidak ditentukan kepada \'Bar::kConst\'\" apabila menggunakan ahli const int statik dalam fungsi?

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

Susan Sarandon
Susan Sarandonasal
2024-10-30 19:29:03778semak imbas

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>

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>

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!

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