为什么系统一直报错说:使用了未定义的类型Students?

#include<iostream>
using namespace std;
#include<string>
class Students;
class Teachers
{
private:
	Students* pStudents;
public:
	string m_Name;
	string m_ID;
	void CheckHomework()
	{
		cout << "正在检查" << pStudents->m_Homework << endl;
	}

};

class Students
{
	friend Teachers;
public:
	Students():m_Homework("作业")
	{

	}
	string m_Name;
	string m_StudyNumber;
private:
	string m_Homework;
};

void test01()
{
	Teachers tr1;
	tr1.CheckHomework();
}

int main()
{
	test01();
	system("pause");
	return 0;
}

 

#include <iostream>
using namespace std;
#include <string>

class Students;

class Teachers
{
private:
    Students *pStudents;

public:
    string m_Name;
    string m_ID;
    // 1. 这些方法用了Students的具体方法, 虽然前面提前申明了Students, 但是没有具体定义是不行的, 所以需要放在后面实现
    void CheckHomework();
    Teachers();
    ~Teachers();
};

class Students
{
    // 2. 申明友元类需要用friend class, 非必须
    friend class Teachers;

public:
    Students() : m_Homework("作业")

    {
    }

    string m_Name;

    string m_StudyNumber;

private:
    string m_Homework;
};

// 3. Hint! Teachers的一些方法放在这里实现了, 即Students的定义之后
void Teachers::CheckHomework()
{
    cout << "正在检查" << pStudents->m_Homework << endl;
}

Teachers::Teachers(){
    pStudents = new Students();
}

Teachers::~Teachers(){
    delete pStudents;
    pStudents = nullptr;
}

void test01()

{

    Teachers tr1;

    tr1.CheckHomework();
}

int main()

{

    test01();

    system("pause");

    return 0;
}

有三处注释,题主可以看看。

因为解析的时候不知道对应的实体

    
#include<iostream>
using namespace std;
#include<string>
class Students;
class Teachers
{
private:
    Students* pStudents;
public:
    string m_Name;
    string m_ID;
    void CheckHomework();
};
 
class Students
{
    friend Teachers;
public:
    Students():m_Homework("作业")
    {
 
    }
    string m_Name;
    string m_StudyNumber;
private:
    string m_Homework;
};
 
void Teachers::CheckHomework()
{
    cout << "正在检查" << pStudents->m_Homework << endl;
}

void test01()
{
    Teachers tr1;
    tr1.CheckHomework();
}
 
int main()
{
    test01();
    system("pause");
    return 0;
}