Mentakrifkan Fungsi Ahli Sebaris dalam Fail .cpp: Satu Teka-teki
Walaupun fungsi ahli sebaris biasanya diletakkan dalam pengepala untuk dimasukkan terus semasa penyusunan, senario tertentu menuntut pelaksanaannya dalam fail .cpp. Satu kes sedemikian melibatkan pekeliling termasuk, di mana pelaksanaan fungsi ahli sebaris mesti ditakrifkan dalam fail .cpp.
Dilema Pekeliling Termasuk
Pertimbangkan contoh berikut :
A.h
<code class="cpp">#pragma once #include "B.h" class A { B b; };</code>
B.h
<code class="cpp">#pragma once class A; // forward declaration class B { inline A getA(); };</code>
B.cpp
<code class="cpp">#include "B.h" #include "A.h" inline A B::getA() { return A(); }</code>
Dalam situasi ini, disebabkan pekeliling termasuk antara A.h dan B.h, pelaksanaan fungsi ahli sebaris getA() perlu ditakrifkan dalam B.cpp. Walau bagaimanapun, ini menimbulkan persoalan asas:
Adakah Compiler Inline mendapatA() dengan betul?
Tidak. Pengkompil hanya menyelaraskan fungsi apabila definisinya tersedia pada titik penggunaan. Dalam contoh di atas, takrif getA() tidak kelihatan apabila ia dipanggil daripada fail .cpp lain, yang membawa kepada ralat "luaran yang tidak dapat diselesaikan" semasa memaut.
Kepentingan Kata Kunci Sebaris
Hanya kata kunci sebaris yang terdapat dalam definisi di luar isi kelas (dalam B.cpp dalam kes ini) adalah penting. Kata kunci sebaris dalam pengepala (dalam B.h) berfungsi sebagai pengisytiharan, menunjukkan bahawa pelaksanaan akan disediakan di tempat lain.
Pendekatan Alternatif untuk Menentukan Fungsi Ahli Sebaris dalam Fail .cpp
Pada masa ini, tiada kaedah alternatif untuk menentukan fungsi ahli sebaris dalam fail .cpp. Piawaian memerlukan definisinya diletakkan dalam pengepala untuk pengembangan sebaris yang betul.
Atas ialah kandungan terperinci Bolehkah Anda Menentukan Fungsi Ahli Sebaris dalam Fail .cpp? Pandangan pada Pekeliling Termasuk dan Kelakuan Penyusun.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!