Bagaimana untuk menyelesaikan ralat kompilasi C++: 'rujukan tidak ditentukan kepada 'class::function'?

WBOY
Lepaskan: 2023-08-25 17:56:50
asal
881 orang telah melayarinya

解决C++编译错误:'undefined reference to 'class::function'',如何解决?

Selesaikan ralat kompilasi C++: 'rujukan tidak ditentukan kepada 'class::function'', bagaimana untuk menyelesaikannya?

Apabila menulis program C++, kita sering menghadapi ralat kompilasi. Salah satu ralat biasa ialah ralat "rujukan tidak ditentukan kepada 'class::function'". Ralat ini biasanya disebabkan oleh fungsi atau ahli kelas yang dirujuk dalam fail sumber C++, tetapi definisi atau pelaksanaan fungsi yang sepadan tidak ditemui semasa proses penyusunan. Dalam artikel ini, kami akan membincangkan punca ralat ini dan memberikan beberapa cara untuk membetulkannya.

Sebelum mula menyelesaikan ralat ini, kita perlu memahami beberapa pengetahuan berkaitan proses penyusunan C++. Penyusunan C++ dibahagikan kepada dua langkah: penyusunan dan pemautan. Semasa proses penyusunan, pengkompil menyemak kod dalam fail sumber dan menjana fail objek yang sepadan. Semasa proses pemautan, pengkompil memautkan fail objek dan fail perpustakaan lain bersama-sama untuk menjana fail boleh laku.

Apabila kita memanggil fungsi atau ahli kelas dalam fail sumber C++, pengkompil akan menjana fail objek yang sepadan semasa proses penyusunan dan menghuraikan panggilan semasa proses pemautan. Walau bagaimanapun, jika takrifan atau pelaksanaan fungsi ini tidak ditemui semasa proses pemautan, ralat 'rujukan tidak ditentukan kepada 'class::function' akan berlaku.

Jadi, bagaimana kita harus menyelesaikan ralat ini? Beberapa penyelesaian yang mungkin disenaraikan di bawah:

  1. Pastikan definisi atau pelaksanaan fungsi wujud dalam fail sumber:

Pertama, kita perlu menyemak sama ada definisi atau pelaksanaan fungsi kelas wujud dalam fail sumber . Jika fungsi ini tidak ditakrifkan atau dilaksanakan dengan betul, pengkompil tidak dapat menemuinya, mengakibatkan ralat pautan.

Kod sampel adalah seperti berikut:

// MyClass.h
class MyClass {
public:
    void myFunction();
};

// MyClass.cpp
#include "MyClass.h"
void MyClass::myFunction() {
    // Function implementation
}
Salin selepas log masuk

Dalam contoh ini, kami mengisytiharkan kelas MyClass dalam fail pengepala "MyClass.h" dan melaksanakan fungsi myFunction dalam fail sumber "MyClass.cpp".

  1. Semak ruang nama fungsi:

Jika kelas kita ditakrifkan dalam ruang nama, maka apabila memanggil fungsi kelas, kita perlu menentukan ruang nama yang dimiliki oleh fungsi tersebut. Jika tidak, pengkompil akan menganggap fungsi itu sebagai fungsi global dan bukannya fungsi ahli kelas.

Kod sampel adalah seperti berikut:

// MyClass.h
namespace MyNamespace {
    class MyClass {
    public:
        void myFunction();
    };
}

// MyClass.cpp
#include "MyClass.h"
void MyNamespace::MyClass::myFunction() {
    // Function implementation
}
Salin selepas log masuk

Dalam contoh ini, kami mentakrifkan kelas MyClass dalam ruang nama "MyNamespace". Apabila memanggil fungsi myFunction, anda perlu menggunakan sintaks "MyNamespace::MyClass".

  1. Semak sama ada pengisytiharan dan definisi fungsi sepadan:

Jika senarai parameter fungsi dalam kelas tidak sepadan dengan pengisytiharan dan definisi, pengkompil juga akan melaporkan ralat. Apabila memanggil fungsi, pastikan parameter yang diluluskan sepadan dengan jenis, susunan dan bilangan parameter dalam definisi fungsi.

Kod sampel adalah seperti berikut:

// MyClass.h
class MyClass {
public:
    void myFunction(int x, int y);
};

// MyClass.cpp
#include "MyClass.h"
void MyClass::myFunction(int x, int y) {
    // Function implementation
}
Salin selepas log masuk

Dalam contoh ini, fungsi myFunction menerima dua parameter integer. Apabila memanggil fungsi, anda perlu menghantar nombor dan jenis hujah yang sama.

Untuk meringkaskan, menyelesaikan ralat 'rujukan tidak ditentukan kepada 'class::function'' memerlukan kami menyemak dengan teliti sama ada definisi atau pelaksanaan fungsi wujud, sama ada ruang nama kepunyaan fungsi itu betul, dan sama ada pengisytiharan dan definisi padanan fungsi. Dengan mentakrifkan dan melaksanakan fungsi dengan betul, dan memastikan bahawa parameter diluluskan dengan betul semasa memanggil, kita boleh mengelakkan ralat kompilasi ini.

Saya harap artikel ini dapat membantu pembaca menyelesaikan ralat kompilasi yang sama dan meningkatkan kecekapan dan kualiti penulisan program C++.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat kompilasi C++: 'rujukan tidak ditentukan kepada 'class::function'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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