Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menyelesaikan ralat kompilasi C++: 'definisi semula 'fungsi'?

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'definisi semula 'fungsi'?

王林
Lepaskan: 2023-08-27 14:27:13
asal
1930 orang telah melayarinya

解决C++编译错误:'redefinition of 'function'',如何解决?

Selesaikan ralat kompilasi C++: 'definisi semula 'fungsi', bagaimana untuk menyelesaikannya?

C++, sebagai bahasa pengaturcaraan yang berkuasa, sering digunakan secara meluas dalam pembangunan perisian. Walau bagaimanapun, menulis program C++ tanpa ralat tidak mudah untuk pemula. Salah satu ralat biasa ialah "takrif semula 'fungsi'", yang merupakan ralat definisi semula fungsi. Dalam artikel ini saya akan menerangkan punca-punca ralat ini dan cara membetulkannya.

Sebab ralat:
Apabila kita mentakrifkan fungsi dengan nama yang sama dalam program C++, pengkompil akan melaporkan ralat "definisi semula 'fungsi'". Ralat ini biasanya berlaku dalam situasi berikut:

  1. Fungsi yang sama ditakrifkan berbilang kali dalam fail sumber yang sama.
  2. Fungsi yang sama ditakrifkan dalam fail sumber yang berbeza, dan fail sumber ini dipautkan ke dalam program yang sama.

Lihat contoh di bawah:

// example.cpp

int add(int a, int b)
{
    return a + b;
}

int add(int a, int b) // 重复定义相同的函数
{
    return a + b;
}

int main()
{
    int result = add(3, 4);
    return 0;
}
Salin selepas log masuk

Dalam contoh di atas, kami telah mentakrifkan fungsi bernama "tambah" dua kali dalam fail sumber yang sama. Apabila kami cuba menyusun atur cara ini, kami menghadapi ralat "takrif semula 'tambah'".

Penyelesaian:
Terdapat dua cara utama untuk menyelesaikan ralat definisi semula fungsi: satu adalah untuk mengelakkan mentakrifkan fungsi yang sama beberapa kali dalam fail sumber yang sama; fail untuk mengelakkan konflik.

  1. Elakkan mentakrifkan fungsi yang sama beberapa kali dalam fail sumber yang sama.
// example.cpp

int add(int a, int b)
{
    return a + b;
}

int main()
{
    int result = add(3, 4);
    return 0;
}
Salin selepas log masuk

Kod di atas telah membetulkan ralat definisi semula fungsi. Kami hanya menyimpan satu definisi fungsi dan memanggilnya dalam fungsi utama.

  1. Gunakan pengisytiharan fungsi dan fail pengepala apabila mentakrifkan fungsi yang sama dalam fail sumber yang berbeza.

Mula-mula, mari buat dua fail sumber: example.cpp dan add.cpp.

// add.h

#ifndef ADD_H
#define ADD_H

int add(int a, int b);

#endif
Salin selepas log masuk
// add.cpp

#include "add.h"

int add(int a, int b)
{
    return a + b;
}
Salin selepas log masuk
// example.cpp

#include "add.h"

int main()
{
    int result = add(3, 4);
    return 0;
}
Salin selepas log masuk

Dalam contoh di atas, kami menggunakan fail pengepala dan pengisytiharan fungsi untuk menyelesaikan ralat definisi semula fungsi. Dalam fail pengepala add.h, kami mentakrifkan pengisytiharan fungsi tambah dan menggunakan prapemproses bersyarat untuk mengelakkan kemasukan berulang.

Dalam fail sumber add.cpp, kami melaksanakan definisi khusus fungsi tambah.

Akhir sekali, dalam fail sumber example.cpp, kami memasukkan fail pengepala add.h dan boleh menggunakan fungsi tambah tanpa ralat definisi semula fungsi.

Ringkasan:
Ralat takrifan semula fungsi ialah salah satu ralat biasa dalam pembangunan C++. Untuk mengelakkan ralat ini, kita harus mengelak daripada mentakrifkan fungsi yang sama beberapa kali dalam fail sumber yang sama, dan menggunakan pengisytiharan fungsi dan fail pengepala untuk menyelesaikan konflik yang disebabkan oleh mentakrifkan fungsi yang sama dalam fail sumber yang berbeza. Dengan cara ini kita boleh menulis program C++ yang berkualiti tinggi dan bebas ralat.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat kompilasi C++: 'definisi semula '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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan