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++

Aug 26, 2023 pm 01:58 PM
invalid use masalah c++ Ralat pengaturcaraan undefined type

解决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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Struktur Data Bahasa C: Perwakilan Data dan Operasi Pokok dan Grafik Struktur Data Bahasa C: Perwakilan Data dan Operasi Pokok dan Grafik Apr 04, 2025 am 11:18 AM

Struktur Data Bahasa C: Perwakilan data pokok dan graf adalah struktur data hierarki yang terdiri daripada nod. Setiap nod mengandungi elemen data dan penunjuk kepada nod anaknya. Pokok binari adalah jenis pokok khas. Setiap nod mempunyai paling banyak dua nod kanak -kanak. Data mewakili structtreenode {intData; structtreenode*left; structtreenode*right;}; Operasi mewujudkan pokok traversal pokok (predecision, in-order, dan kemudian pesanan) Node Node Carian Pusat Node Node adalah koleksi struktur data, di mana unsur-unsur adalah simpul, dan mereka boleh dihubungkan bersama melalui tepi dengan data yang betul atau tidak jelas yang mewakili jiran.

Bagaimanakah saya menggunakan rujukan RValue dengan berkesan di C? Bagaimanakah saya menggunakan rujukan RValue dengan berkesan di C? Mar 18, 2025 pm 03:29 PM

Artikel membincangkan penggunaan rujukan RValue yang berkesan dalam C untuk bergerak semantik, pemajuan sempurna, dan pengurusan sumber, menonjolkan amalan terbaik dan penambahbaikan prestasi. (159 aksara)

Kebenaran di sebalik masalah operasi fail bahasa C Kebenaran di sebalik masalah operasi fail bahasa C Apr 04, 2025 am 11:24 AM

Kebenaran mengenai masalah operasi fail: Pembukaan fail gagal: Kebenaran yang tidak mencukupi, laluan yang salah, dan fail yang diduduki. Penulisan data gagal: Penampan penuh, fail tidak boleh ditulis, dan ruang cakera tidak mencukupi. Soalan Lazim Lain: Traversal fail perlahan, pengekodan fail teks yang salah, dan kesilapan bacaan fail binari.

Bagaimanakah saya menggunakan julat dalam C 20 untuk manipulasi data yang lebih ekspresif? Bagaimanakah saya menggunakan julat dalam C 20 untuk manipulasi data yang lebih ekspresif? Mar 17, 2025 pm 12:58 PM

C 20 julat meningkatkan manipulasi data dengan ekspresi, komposiliti, dan kecekapan. Mereka memudahkan transformasi kompleks dan mengintegrasikan ke dalam kod sedia ada untuk prestasi dan kebolehkerjaan yang lebih baik.

Bagaimanakah penghantaran dinamik berfungsi di C dan bagaimana ia mempengaruhi prestasi? Bagaimanakah penghantaran dinamik berfungsi di C dan bagaimana ia mempengaruhi prestasi? Mar 17, 2025 pm 01:08 PM

Artikel ini membincangkan penghantaran dinamik dalam C, kos prestasinya, dan strategi pengoptimuman. Ia menyoroti senario di mana penghantaran dinamik memberi kesan kepada prestasi dan membandingkannya dengan penghantaran statik, menekankan perdagangan antara prestasi dan

Bagaimanakah saya menggunakan semantik bergerak di C untuk meningkatkan prestasi? Bagaimanakah saya menggunakan semantik bergerak di C untuk meningkatkan prestasi? Mar 18, 2025 pm 03:27 PM

Artikel ini membincangkan menggunakan semantik Move dalam C untuk meningkatkan prestasi dengan mengelakkan penyalinan yang tidak perlu. Ia meliputi pelaksanaan pembina bergerak dan pengendali tugasan, menggunakan STD :: bergerak, dan mengenal pasti senario utama dan perangkap untuk Appl yang berkesan

Apakah keperluan asas untuk fungsi bahasa C Apakah keperluan asas untuk fungsi bahasa C Apr 03, 2025 pm 10:06 PM

Fungsi bahasa C adalah asas untuk modularization kod dan bangunan program. Mereka terdiri daripada pengisytiharan (tajuk fungsi) dan definisi (badan fungsi). Bahasa C menggunakan nilai untuk lulus parameter secara lalai, tetapi pembolehubah luaran juga boleh diubahsuai menggunakan lulus alamat. Fungsi boleh mempunyai atau tidak mempunyai nilai pulangan, dan jenis nilai pulangan mestilah selaras dengan perisytiharan. Penamaan fungsi harus jelas dan mudah difahami, menggunakan nomenclature unta atau garis bawah. Ikuti prinsip tanggungjawab tunggal dan pastikan kesederhanaan fungsi untuk meningkatkan kebolehkerjaan dan kebolehbacaan.

Apakah potongan jenis auto? Apakah faedah dan batasannya? Apakah potongan jenis auto? Apakah faedah dan batasannya? Mar 26, 2025 pm 11:23 PM

Artikel ini membincangkan potongan jenis auto dalam pengaturcaraan, memperincikan manfaatnya seperti kelebihan kod yang dikurangkan dan kebolehkerjaan yang lebih baik, dan batasannya seperti kekeliruan dan cabaran debug yang berpotensi.

See all articles