2016-09-24 72 views
1

我有一個名爲學生的地圖,我想存儲另一個類的實例。我收到以下錯誤信息:對象沒有在範圍內聲明(std :: map)

'學生' 並沒有在此範圍

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; 
}; 

如果複製我的地圖主,我沒有收到此錯誤,但後來當我嘗試插入情況下,我不能訪問它。我寧願沒有這張地圖。

+1

'學生'定義在哪裏? – Dan

+0

你能提供'student.h'嗎? – Ap31

+0

學生是一個單獨的類,接受兩個std :: string參數,這些參數存儲在私有變量中,包含setter和getters。我不想在這裏複製所有的代碼。 –

回答

1

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

對於您的情況,您可以從student.h中刪除#include "app.h",因爲它不是必需的。

0

製作作爲一個答案我的評論:

執行以下兩件事情:

  1. 無需包括student.happ.cpp,它已經通過納入得到它app.h

  2. 不包括app.h in student.h

相關問題