Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ralat kompilasi C++: pelbagai definisi, bagaimana untuk mengubah suainya?

Ralat kompilasi C++: pelbagai definisi, bagaimana untuk mengubah suainya?

WBOY
WBOYasal
2023-08-21 23:07:501250semak imbas

Dalam pengaturcaraan C++, ralat kompilasi "definisi berbilang" sering berlaku. Ini kerana berbilang pembolehubah, fungsi atau objek dengan nama yang sama ditakrifkan dalam atur cara. Pembolehubah, fungsi atau objek ini semuanya dianggap sama oleh pengkompil, jadi pengkompil akan menjana ralat "takrifan berbilang".

Dalam pengaturcaraan sebenar, bagaimana kita harus mengelak dan menyelesaikan masalah sedemikian?

  1. Gunakan fail pengepala

Dalam C++, kita boleh menentukan beberapa fungsi atau pembolehubah yang digunakan semula dalam fail pengepala, supaya kita boleh mengelak daripada mentakrifkan fungsi atau pembolehubah yang sama berulang kali dalam berbilang fail. Apabila menggunakan fungsi atau pembolehubah ini, kita hanya perlu memasukkan fail pengepala.

Contoh kod:

//header.h

ifndef HEADER_H

takrifkan HEADER_H

int add(int a, int b);

endif

endif

/

sumber "c.ppp"

int add(int a, int b){

return a + b;

}

//source2.cpp

serta "header.h"

int add(int a, int b){

rreee

}
    Dalam kod sampel ini, kami mentakrifkan fail pengepala "header.h" dan fungsi "tambah" di dalamnya. Dalam dua fail sumber "source1.cpp" dan "source2.cpp", kami mentakrifkan pelaksanaan fungsi "add" masing-masing. Apabila kami menyusun kedua-dua fail sumber ini, pengkompil akan mengarahkan panggilan fungsi "tambah" kepada definisi dalam fail pengepala, dengan itu mengelakkan ralat "takrifan berbilang".
Menggunakan kata kunci statik

Dalam C++, kita boleh menggunakan kata kunci "statik" untuk menandakan pembolehubah atau fungsi sebagai "statik" untuk mengelakkan definisi pendua dalam berbilang fail.

Contoh kod:

//source1.cpp

statik int num;

//source2.cpp

static int num;

    Dalam contoh kod ini, kami mentakrifkan pembolehubah statik dalam dua fail sumber masing-masing "num". Disebabkan kata kunci "statik", pengkompil akan menganggap kedua-dua pembolehubah ini sebagai dua pembolehubah berbeza tanpa menyebabkan ralat "takrifan berbilang".
Gunakan ruang nama

Dalam C++, kita boleh menggunakan ruang nama untuk mengelakkan definisi berulang pembolehubah, fungsi atau objek.

Contoh kod:

//source1.cpp

ruang nama A{

return a - b;

}

//source2.cpp

ruang nama A{

int num;

}

Kita sama dalam dua fail sumber ini, ruang nama "A" ditakrifkan, dan pembolehubah "num" yang sama ditakrifkan dalam ruang nama itu. Memandangkan ruang nama menyelesaikan masalah konflik penamaan, pengkompil tidak akan melaporkan ralat "takrifan berbilang".

🎜Ringkasnya, kita boleh mengelakkan definisi berulang pembolehubah, fungsi atau objek dengan menggunakan fail pengepala, kata kunci statik dan ruang nama. Dalam pembangunan sebenar, kita harus memilih kaedah yang sesuai mengikut keperluan dan mematuhi piawaian pengekodan tertentu, supaya dapat mengurangkan ralat penyusunan dan masa penyahpepijatan sebanyak mungkin. 🎜

Atas ialah kandungan terperinci Ralat kompilasi C++: pelbagai definisi, bagaimana untuk mengubah suainya?. 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