对象未在范围内声明(std :: map)

时间:2016-09-24 12:51:36

标签: c++

我有一个名为students的地图,我希望存储另一个类的实例。我收到以下错误消息:

未在此范围内声明'学生'

std::map<int, Student> students;

以下是我的代码的相关部分:

APP.H

#include <iostream>
#include <string>
#include <map>

#include "student.h"

class App
{
public:
    void AddStudent();

protected:
    std::string SName;
    std::string SEmail;

    std::map<int, Student> students;
};

APP.CPP

#include <string>
#include <iostream>

#include "app.h"
#include "student.h"

void App::AddStudent()
{
    std::cin >> SName;
    std::cin >> SEmail;
    Student Stu(SName, SEmail);
    students.insert(std::make_pair(someID, Stu));
}

STUDENT.H

#include <string>
#include <iostream>

#include "app.h"
#include "test.h"

class Student
{
public:
    Student() { }
    Student(std::string studentName, std::string studentEmail);
    int studentId;

    std::string GetStudentName() const;
    std::string GetStudentEmail() const;
    void SetStudentName(std::string sn);
    void SetStudentEmail(std::string se);

private:
    static int tempId;

    std::string studentName;
    std::string studentEmail;
};

如果我将地图复制到main,我就不会收到此错误,但是当我尝试插入实例时,我无法访问它。我宁愿没有这张地图。

2 个答案:

答案 0 :(得分:1)

student.h包括app.h,但app.h包含student.h

在您的情况下,您只需从#include "app.h"移除student.h,因为不需要。{/ p>

答案 1 :(得分:0)

将我的评论作为答案:

做以下两件事:

  1. 无需在student.h中加入app.cpp,它已通过加入app.h

  2. 获取
  3. 请勿在{{1​​}}

  4. 中加入app.h