Bolehkah Anda Menentukan Fungsi Ahli Sebaris dalam Fail .cpp? Pandangan pada Pekeliling Termasuk dan Kelakuan Penyusun.

Susan Sarandon
Lepaskan: 2024-10-30 14:03:52
asal
460 orang telah melayarinya

 Can You Define Inline Member Functions in .cpp Files? A Look at Circular Includes and Compiler Behavior.

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>
Salin selepas log masuk

B.h

<code class="cpp">#pragma once
class A; // forward declaration

class B {
    inline A getA();
};</code>
Salin selepas log masuk

B.cpp

<code class="cpp">#include "B.h"
#include "A.h"

inline A B::getA() {
    return A();
}</code>
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!