Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Selesaikan masalah "ralat: penggunaan tidak sah 'kelas' jenis tidak ditentukan" dalam kod C++

Selesaikan masalah "ralat: penggunaan tidak sah 'kelas' jenis tidak ditentukan" dalam kod C++

WBOY
WBOYasal
2023-08-26 13:58:511800semak imbas

解决C++代码中出现的“error: invalid use of undefined type 'class'”问题

Selesaikan masalah "error: invalid use of undefined type 'class'" dalam kod C++

Dalam pengaturcaraan C++, kadangkala kita akan menemui mesej ralat kompilasi seperti ini: "error: invalid use of undefined type 'class'". Ralat ini bermakna kami menggunakan kelas yang tidak ditentukan dalam kod kami.

Ralat ini biasanya berlaku dalam situasi berikut:

  1. Terlupa untuk memasukkan fail pengepala kelas.
  2. Pengisytiharan hadapan kelas tidak lengkap.
  3. Definasi kelas adalah selepas digunakan.
  4. Kebergantungan bulat muncul dalam definisi kelas.

Untuk lebih memahami dan menyelesaikan masalah ini, di bawah kami akan memperincikan setiap sebab dan memberikan contoh kod yang sepadan.

  1. Terlupa memasukkan fail pengepala untuk kelas

Ini adalah salah satu sebab yang paling biasa. Apabila kita menggunakan objek kelas tertentu atau memanggil fungsi ahlinya dalam fail, kita mesti memasukkan fail pengepala kelas terlebih dahulu.

Sebagai contoh, kami mempunyai fail pengepala bernama "myClass.h" yang mentakrifkan kelas bernama "myClass". Kemudian gunakan objek kelas ini dalam "main.cpp" dan panggil fungsi ahlinya. Jika kita terlupa untuk memasukkan "myClass.h" dalam fail "main.cpp", ia akan menyebabkan ralat penyusunan.

Berikut ialah contoh:

myClass.h:

#ifndef MYCLASS_H
#define MYCLASS_H

class myClass {
public:
    void doSomething();
};

#endif

main.cpp:

#include <iostream>
// #include "myClass.h"  // 忘记包含头文件

int main() {
    myClass obj; // 编译错误:invalid use of undefined type 'class myClass'
    obj.doSomething();

    return 0;
}

Penyelesaiannya ialah dengan memasukkan fail pengepala yang betul dalam "main.cpp", iaitu menambah baris kod: # sertakan " myClass.h". #include "myClass.h"

  1. 类的前向声明不完整

在有些情况下,我们可能只需要知道类的存在而不必使用它的成员。这时,我们可以使用类的前向声明来解决。

然而,如果在使用类的成员时前向声明不完整,就会产生编译错误。

以下是一个示例:

myClass.h:

#ifndef MYCLASS_H
#define MYCLASS_H

class myClass {
public:
    void doSomething();
};

#endif

someClass.h:

#ifndef SOMECLASS_H
#define SOMECLASS_H

class someClass; // 不完整的前向声明

class otherClass {
public:
    void doSomethingWithSomeClass(someClass obj);
};

#endif

someClass.cpp:

#include "myClass.h"
// #include "someClass.h"  // 忘记包含头文件

void otherClass::doSomethingWithSomeClass(someClass obj) {
    obj.doSomething(); // 编译错误:invalid use of undefined type 'class someClass'
}

解决办法是在"someClass.cpp"中包含正确的头文件,即添加一行代码:#include "someClass.h"

    Pengisytiharan hadapan kelas yang tidak lengkap
    1. Dalam sesetengah kes, kita mungkin hanya perlu mengetahui kewujudan kelas tanpa menggunakan ahlinya. Pada masa ini, kita boleh menggunakan pengisytiharan hadapan kelas untuk menyelesaikan masalah.

    Walau bagaimanapun, jika pengisytiharan hadapan tidak lengkap semasa menggunakan ahli kelas, ralat penyusunan akan berlaku.

    Berikut ialah contoh:

    myClass.h:

    #include "myClass.h"
    
    void myClass::doSomething() {
        // do something
    }
    
    void otherFunction() {
        myClass obj; // 编译错误:invalid use of undefined type 'class myClass'
    }

    someClass.h:

    #ifndef CLASSA_H
    #define CLASSA_H
    
    #include "classB.h"
    
    class classA {
        classB obj;
    };
    
    #endif
      someClass.cpp:
    1. #ifndef CLASSB_H
      #define CLASSB_H
      
      #include "classA.h"
      
      class classB {
          classA obj;
      };
      
      #endif
    2. Penyelesaian adalah dengan memasukkan fail header.clase.c yang betul dalam "add.c.pp.c" kod :#include "someClass.h".

    Definisi kelas selepas digunakan

    Dalam C++, definisi kelas perlu sebelum digunakan. Jika kita menggunakan kelas dahulu dan kemudian menentukannya, kita akan mendapat ralat penyusunan.

    Berikut ialah contoh:

    myClass.cpp:

    rrreee

    Penyelesaiannya ialah meletakkan definisi kelas sebelum digunakan, atau pengisytiharan kelas sebelum digunakan.

    Kebergantungan bulat dalam definisi kelas🎜🎜🎜Jika terdapat kebergantungan bulat antara dua atau lebih kelas, pengkompil tidak akan dapat menyelesaikan kebergantungan di antara mereka, yang membawa kepada ralat kompilasi. 🎜🎜Berikut ialah contoh: 🎜🎜classA.h: 🎜rrreee 🎜classB.h: 🎜rrreee🎜Penyelesaian adalah untuk cuba mengurangkan atau menghapuskan kebergantungan bulat antara kelas, seperti menggunakan pengisytiharan hadapan atau menyusun semula struktur kod. Jika kebergantungan bulat tidak dapat dielakkan, pertimbangkan untuk menggunakan kelas antara muka atau kelas asas maya tulen untuk menyelesaikan kebergantungan. 🎜🎜Ringkasan: 🎜🎜Melalui penjelasan dan contoh kod di atas, kita boleh lebih memahami dan menyelesaikan masalah "error: invalid use of undefined type 'class'" dalam kod C++. Apabila menulis kod secara rasmi, kita harus memberi perhatian untuk memasukkan fail pengepala yang betul, melengkapkan pengisytiharan ke hadapan, definisi kelas sebelum digunakan dan mengelakkan isu seperti kebergantungan bulat untuk memastikan kod itu boleh disusun dan dijalankan dengan betul. 🎜

Atas ialah kandungan terperinci Selesaikan masalah "ralat: penggunaan tidak sah 'kelas' jenis tidak ditentukan" dalam kod C++. 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