Rumah >pembangunan bahagian belakang >C++ >Ralat kompilasi C++: Nama yang layak sepenuhnya tidak dijumpai, bagaimana untuk mengubah suainya?

Ralat kompilasi C++: Nama yang layak sepenuhnya tidak dijumpai, bagaimana untuk mengubah suainya?

WBOY
WBOYasal
2023-08-22 10:48:141187semak imbas

C++ ialah bahasa pengaturcaraan yang digunakan secara meluas dalam pengaturcaraan peringkat sistem dan pengkomputeran berprestasi tinggi. Tetapi dalam proses menggunakan C++, kami sering menghadapi ralat kompilasi. Dalam artikel ini, kami akan membincangkan ralat kompilasi C++ yang biasa - nama yang layak sepenuhnya tidak ditemui dan cara membetulkannya.

1. Penerangan masalah

Apabila menyusun kod C++, pengkompil mungkin melaporkan ralat berikut:

error: ‘someIdentifier’ was not declared in this scope

atau

error: ‘someIdentifier’ is not a member of ‘someObject’

Ralat ini menunjukkan bahawa pengkompil tidak dapat mencari definisi nama tertentu dalam kod.

2. Punca masalah

C++ ialah bahasa yang ditaip secara statik, yang bermaksud pembolehubah atau fungsi mesti diisytiharkan atau ditakrifkan sebelum ia digunakan. Jika pengecam tidak diisytiharkan atau ditakrifkan sebelum ia digunakan, pengkompil tidak dapat memahami maksud pengecam.

Sebagai contoh, pertimbangkan coretan kod C++ berikut:

int main() {
    someFunction();
    return 0;
}

Jika someFunction() tidak diisytiharkan atau ditakrifkan dalam coretan kod ini, pengkompil akan membuang ralat nama yang tidak ditemui. someFunction()进行声明或定义,编译器就会出现未找到名称的错误。

同样,如果尝试在一个对象中使用不存在的成员,也会产生未找到名称的错误。例如,考虑以下代码:

class SomeClass {
public:
    void someMethod();
};

int main() {
    SomeClass obj;
    obj.nonExistentMethod();
    return 0;
}

在该代码片段中,nonExistentMethod()是一个不存在的成员函数。因此,在尝试使用它时编译器会报错。

三、解决方案

为了解决“未找到完全限定的名称”的错误,我们需要在代码中对缺失的标识符进行声明或定义。

对于函数和变量,我们可以在它们第一次被使用之前通过声明来确保它们已经定义。例如:

void someFunction(); // 函数声明

int main() {
    someFunction();
    return 0;
}

void someFunction() { // 函数定义
    // ...
}

在该代码片段中,我们通过函数声明 void someFunction(); 来确保 someFunction() 已经定义。如果没有该声明,编译器将无法理解 someFunction() 的含义。

对于对象成员,我们需要确保使用的方法已经在该类中声明或定义。例如:

class SomeClass {
public:
    void someMethod();
};

int main() {
    SomeClass obj;
    obj.someMethod();
    return 0;
}

void SomeClass::someMethod() { // 成员函数定义
    // ...
}

在该代码片段中,我们确保 someMethod()

Begitu juga, jika anda cuba menggunakan ahli yang tidak wujud dalam objek, anda juga akan mendapat ralat nama tidak dijumpai. Sebagai contoh, pertimbangkan kod berikut:

rrreee

Dalam coretan kod ini, nonExistentMethod() ialah fungsi ahli yang tidak wujud. Oleh itu, pengkompil akan mengeluh apabila cuba menggunakannya.

3. Penyelesaian🎜🎜Untuk menyelesaikan ralat "nama yang layak sepenuhnya tidak ditemui", kami perlu mengisytiharkan atau mentakrifkan pengecam yang hilang dalam kod. 🎜🎜Untuk fungsi dan pembolehubah, kami boleh memastikan ia ditakrifkan dengan mengisytiharkannya sebelum ia digunakan buat kali pertama. Contohnya: 🎜rrreee🎜Dalam coretan kod ini, kami memastikan bahawa someFunction() ditakrifkan oleh pengisytiharan fungsi void someFunction();. Tanpa pengisytiharan ini, pengkompil tidak akan memahami maksud someFunction(). 🎜🎜Untuk ahli objek, kita perlu memastikan kaedah yang digunakan telah diisytiharkan atau ditakrifkan dalam kelas. Contohnya: 🎜rrreee🎜Dalam coretan kod ini, kami memastikan someMethod() diisytiharkan atau ditakrifkan dalam kelas. Tanpa pengisytiharan atau definisi ini, pengkompil mungkin tidak memahami maksud fungsi ahli. 🎜🎜4. Ringkasan🎜🎜Apabila menulis kod C++, kita mesti mengisytiharkan atau mentakrifkan fungsi, pembolehubah dan ahli objek yang digunakan, jika tidak, pengkompil tidak akan dapat memahami maksudnya. Apabila ralat "nama yang layak sepenuhnya tidak ditemui" berlaku, kami perlu mencari dan memastikan bahawa pengecam yang hilang telah diisytiharkan atau ditakrifkan dengan betul. 🎜

Atas ialah kandungan terperinci Ralat kompilasi C++: Nama yang layak sepenuhnya tidak dijumpai, 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