Rumah > pembangunan bahagian belakang > C++ > 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
Lepaskan: 2023-08-26 13:58:51
asal
1862 orang telah melayarinya

解决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
Salin selepas log masuk
Salin selepas log masuk

main.cpp:

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

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

    return 0;
}
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk

someClass.h:

#ifndef SOMECLASS_H
#define SOMECLASS_H

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

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

#endif
Salin selepas log masuk

someClass.cpp:

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

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

解决办法是在"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'
    }
    Salin selepas log masuk

    someClass.h:

    #ifndef CLASSA_H
    #define CLASSA_H
    
    #include "classB.h"
    
    class classA {
        classB obj;
    };
    
    #endif
    Salin selepas log masuk
      someClass.cpp:
    1. #ifndef CLASSB_H
      #define CLASSB_H
      
      #include "classA.h"
      
      class classB {
          classA obj;
      };
      
      #endif
      Salin selepas log masuk
      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!

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