2013-10-03 3 views
1

관련 머리글 및 선언/정의 된 함수가있는 여러 소스 파일을 만들었습니다. 클래스에 멤버가 없다는 오류가 계속 발생합니다. 나는 회원을 내 개인 회원과 명확하게 연결시키는 세트 기능을 요구하고있다. 내가 포함시켜야 할 다른 것이 있습니까?''명명 된 클래스가 없습니다 ''

#ifndef STUDENTCOLLECTION_CPP 
#define STUDENTCOLLECTION_CPP 

#include<iostream> 
#include<fstream> 
#include<vector> 
using namespace std; 

#include "StudentCollection.h" 
#include "StudentProfile.h" 
#include "Student.h" 
#include "Person.h" 
#include "Course.h" 

void StudentCollection::GetInfo() 
{ 
    long SN; 
    string first; 
    string last; 
    string a; 
    char sex; 
    long ID; 
    Course Class1; 
    Course Class2; 
    Course Class3; 
    long num; 
    string name; 
    Person PInfo; 
    Student SInfo; 

    ifstream fin; 
    fin.open("info.txt"); 

    fin >> first >> last >> SN >> a >> sex >> ID >> SInfo.Class1.num >> SInfo.Class1.name >> SInfo.Class2.num >> SInfo.Class2.name >> SInfo.Class3.num >> SInfo.Class3.\ 
name; 

while (!fin.eof()) 
    { 
    StudentProfile New_Stu; 
    New_Stu.SetAStudentProfile(PInfo, SInfo); 
    New_Stu.PInfo.SetSetAPerson(SN, first, last, a, sex); 
    New_Stu.SInfo.SetAStudent(ID, Class1, Class2, Class3); 
    New_Stu.SInfo.SetACourse(num, name); 

    StCollection.push_back(New_Stu); 
    fin >> first >> last >> SN >> a >> sex >> ID >> SInfo.Class1.num >> SInfo.Class1.name >> SInfo.Class2.num >> SInfo.Class2.name >> SInfo.Class3.num >> SInfo.Class3.\ 
name; 
    } 
fin.close(); 
} 

void StudentCollection::PrintCollection() 
{ 
} 

#endif 

StudentProfile.h 파일 :

#ifndef STUDENTPROFILE_H 
#define STUDENTPROFILE_H 

using namespace std; 
#include "Person.h" 
#include "Student.h" 

class StudentProfile 
{ 
private: 
    Person PersonalInfo; 
    Student StdInfo; 

public: 

    void SetAStudentProfile(Person PInfo, Student SInfo); 
    void PrintAStudentProfile(); 
    StudentProfile(){}; 
    StudentProfile(Person PInfo, Student SInfo){}; 
}; 

#endif 

StudentProfile.cpp :

#ifndef STUDENTPROFILE_CPP 
#define STUDENTPROFILE_CPP 

#include<iostream> 
using namespace std; 

#include "StudentProfile.h" 

void StudentProfile::SetAStudentProfile(Person PInfo, Student SInfo) 
{ 
    PersonalInfo = PInfo; 
    StdInfo = SInfo; 
} 

void StudentProfile::PrintAStudentProfile() 
{ 
} 

#endif 

이 내 편집 오류 (I

#ifndef STUDENTCOLLECTION_H 
#define STUDENTCOLLECTION_H 

#include<string> 
#include<vector> 
#include<iostream> 
#include<fstream> 

using namespace std; 

#include "StudentProfile.h" 
#include "Person.h" 
#include "Student.h" 
#include "Course.h" 

class StudentCollection 
{ 
private: 
    vector<StudentProfile> StCollection; 

public: 
    void GetInfo(); 
    void PrintCollection(); 
    StudentCollection(){}; 
    StudentCollection(vector<StudentProfile> StCollection){}; 
}; 

#endif 

이 .CPP 파일입니다 다른 곳에서 물건과 관련된 문제가 있지만 반드시 원인이) 동일 다음 StudentProfile 클래스의 일부로 정의 어느 것도 New_Stu.PInfoNew_Stu.SInfo, 액세스를 시도

New_Stu.PInfo.SetSetAPerson(SN, first, last, a, sex); 
New_Stu.SInfo.SetAStudent(ID, Class1, Class2, Class3); 
New_Stu.SInfo.SetACourse(num, name); 

:

StudentCollection.cpp:43: error: ‘class StudentProfile’ has no member named ‘PInfo’ 
StudentCollection.cpp:44: error: ‘class StudentProfile’ has no member named ‘SInfo’ 
StudentCollection.cpp:45: error: ‘class StudentProfile’ has no member named ‘SInfo’ 

답변

4

당신은이 라인을 가지고있다. PInfoSInfoGetInfo() 방법의 로컬 변수 인 으로 정의되어 있습니다.이를 사용 하시겠습니까?

+0

StudentProfile 클래스의 함수를 사용하여 개인 멤버를 다른 것으로 설정합니다. 나는 그 클래스의 외부 멤버로부터 직접 클래스에 액세스 할 수 없어야한다. 그래서 제 설정 기능에서는 클래스 외부에서 액세스 할 수있는 다른 이름과 동일하게 설정했습니다. – Kevin

+0

@CarNorum - 예, 해당 지역 변수를 사용하려고합니다. – Kevin

6

이 라인 :

StudentProfile New_Stu; 
New_Stu.SetAStudentProfile(PInfo, SInfo); 
New_Stu.PInfo.SetSetAPerson(SN, first, last, a, sex); 
New_Stu.SInfo.SetAStudent(ID, Class1, Class2, Class3); 
New_Stu.SInfo.SetACourse(num, name); 

가되어야한다 :

StudentProfile New_Stu; 
New_Stu.SetAStudentProfile(PInfo, SInfo); 
New_Stu.PersonalInfo.SetSetAPerson(SN, first, last, a, sex); 
New_Stu.StdInfo.SetAStudent(ID, Class1, Class2, Class3); 
New_Stu.StdInfo.SetACourse(num, name); 

그러나 당신은 또한이 StudentCollection 클래스 안에있는 코드이기 때문에 public 이러한 구성원의 액세스 한정자를 변경해야 할 수도 있습니다. 또는 외부에서 PersonalInfoStdInfo 명의 회원에게 액세스 할 필요가 없도록 StudentProfile 내에 추가 설정자를 만들 수 있습니다.

+0

모든 클래스 속성을 비공개로 지정하도록 지시 받았습니다. 그것이 공개적이라면, 나는 지금이 사이트에 없을 것입니다. – Kevin

+0

@KevinSimpsonII : 이것은 'StudentProfile' 클래스 내의 setter에 의해 해결되어야합니다. 나는 나의 대답을 편집했다 :) – LihO

1

실제로 StudenProfile 클래스에는 PInfo 및 SInfo 멤버가 없습니다. 당신이 StudentCollection.cpp 보면 당신은 PINFO 및

Person PInfo; 
Student SInfo; 
... 

SInfo

가 나중에 while 루프 내부는 잘못 사용하는 별도의 지역 변수를 선언 :

New_Stu.PInfo.SetSetAPerson(SN, first, last, a, sex); 
New_Stu.SInfo.SetAStudent(ID, Class1, Class2, Class3); 
New_Stu.SInfo.SetACourse(num, name); 

난 당신이 또한 PersonStudent에 대한 수업을 것 같아요. 아마 Student에는 다음과 같은 구성원이 있습니다. SetAStudentSetACoursePersonSetSetAPerson입니다. 이 경우에는 (New_Stu없이) 다음과 같이 호출하면됩니다.

PInfo.SetSetAPerson(SN, first, last, a, sex); 
SInfo.SetAStudent(ID, Class1, Class2, Class3); 
SInfo.SetACourse(num, name); 
+0

방금 ​​말한 것은 절대적인 의미를 갖는다. 거기에서 함수를 호출해야합니다. 나는 또한 나중에 벡터에서 정보를 인쇄 할 때 학생들을 서로 차별화 할 수 있도록 카운터가 있어야한다고 생각합니다. 나는이 변화를 약간 만들 것이고 나의 실수가 사라지는지 알 것이다. – Kevin

+0

나는 무엇이 잘못되었는지 깨달았다. New_Stu는 StudentProfile 타입이기 때문에, 내 클래스에서 직접 내 set 함수에 액세스 할 수 있습니다! 나는 내가 그것을 놓쳤던 방법을 모르고있다! – Kevin

관련 문제