C++无效使用不完整的类型

C++ invalid use of incomplete type

本文关键字:类型 用不完 无效 C++      更新时间:2023-10-16

我有以下文件:main.cpp,class.cpp,class.hpp,student.cpp,student.hpp

以下是代码:

主.cpp:

#include <iostream>
#include <vector>
#include <string>
#include "class.hpp"

using namespace std;

int main(){
    vector<Student> students;
    vector<Class> classes;
    Class B4( 4, 'B' );
    classes.push_back( B4 );
    Student john( "John", "Boss", B4 );
    students.push_back( john );
    Student marc( "Marc", "Solo", B4 );
    students.push_back( marc );
    marc.printInfo();
    B4.addStudent( marc );
    return 0;
}

类.hpp:

#include <vector>
#include "student.hpp"
using namespace std;
class Class{
private:
    int number;
    char letter;
    vector<Student> students;
public:
    Class( int, char );
    void addStudent( Student & );
    void printClass();
};

类.cpp:

#include <iostream>
#include "class.hpp"

Class::Class( int number, char letter ){
    this -> number = number;
    this -> letter = letter;
}

void Class::printClass(){
    cout << this -> number << "." << this -> letter << endl;
}

void Class::addStudent( Student & student ){
    this -> students . push_back( student );
}

学生.hpp:

#include <string>
using namespace std;
class Class;
class Student{
private:    
    string name;
    string surname;
    Class* classStudent;
public:
    Student( string name, string surname, Class & );
    void printInfo();
};

学生.cpp:

#include <iostream>
#include "student.hpp"
using namespace std;
Student::Student( string name, string surname, Class & classStudent ){
    this -> name            = name;
    this -> surname         = surname;
    this -> classStudent    = &classStudent;
}
// printInfo
void Student::printInfo(){
    cout << "Name: " << this -> name << "nSurname: " << this -> surname <<
                    "nClass:" << this -> classStudent -> printClass() << endl;
}

当我编译这些文件时,我收到以下错误:

student.cpp: In member function ‘void Student::printInfo()’:
student.cpp:15:41: error: invalid use of incomplete type ‘class Class’
      "nClass:" << this -> classStudent -> printClass() << endl;
                                         ^
In file included from student.cpp:2:0:
student.hpp:5:7: error: forward declaration of ‘class Class’
 class Class;
       ^

我从来没有遇到过这样的情况:我需要在二等舱中使用头等舱,在头等舱使用二等舱。

添加

 #include "class.hpp"

#include <iostream>
#include "student.hpp"

student.cpp,否则编译器将不知道Class是什么。