2011-10-17 6 views
0

다른 클래스의 동적 배열이 포함 된 클래스를 작성하려고합니다. 기본 외부 클래스는 Sport이고 보조 (배열의 내부)는 Player입니다. 추가 기능을 작동시키는 데 몇 가지 문제가 있었는데 이제는 마침내 작동하도록했습니다. (나는 생각했습니다) 디스플레이에서 오류가 발생했습니다. Player 클래스의 일부인 Display 함수를 호출하면 읽기 오류가 발생합니다. 나는 여기에 코드의 가장 큰 부분을 게시 할 것입니다. 누군가가 무언가를 잘못 알고 있다면 제게 알려주십시오. 나는이 작업을 가능한 빨리 수행 할 필요가있다. 임무는 오래 지나서야 끝난 것이고, 미래 임무는 그것 위에 구축하는 것을 돕는다. 나는 잘못되고있는 것이 무엇인지 이해할 필요가있는 작업용 버전이 필요하지 않습니다. 라인클래스 내의 동적 클래스 배열

temp[length] = &PromptUser(); 

임시의 주소를 복용와

#include "Sport.h" 
#include <iostream> 

using std::cout; 
using std::endl; 
using std::cin; 

// since we're going to call these from within the class 
// consider making all but DisplayMenu() private 

Sport::Sport() : array(0),length(0) 
{ 

} 

Sport::~Sport() 
{ 

} 

void Sport::DisplayMenu() 
{ 
    bool exit(false); 
    char entry(0); 

    while(exit != true) // clarity 
    { 
    cout << "\nOREGON INSTITUTE OF TECHNOLOGY\n" << endl; 
    cout << " A - Add Player" << endl; 
    cout << " S - Search/Display a Player" << endl; 
    cout << " D - Display all Players" << endl; 
    cout << " C - Display Current Count of Players" << endl; 
    cout << " E - Exit/n" << endl; 
    cin >> entry; 

    switch (entry) 
    { 
     case 'A' : 
      Add(); 
      break; 

     case 'S' : 
      Search(); 
      break; 

     case 'D' : 
      List(); 
      break; 

     case 'C' : 
      cout << "Currently " << length << " Players."; 
      break; 

     case 'E' : 
      exit = true; 
      break; 

     default : 

      break; 
    } 

} 
} 

void Sport::Add() //have array[] and length 
{ 
Player **temp = new Player *[length+1]; 

for (int i = 0; i < length; i++) 
{ 
    temp[i] = array[i]; 
} 
temp[length] = &PromptUser(); 
length++; 

delete [] array; 
array = temp; 
} 

void Sport::List() 
{ 
for (int i = 0; i < length; i++) 
    (*array)[i].Display(); // <---this line is crashing the program. 
} 

void Sport::Search() const 
{ 

} 

Player Sport::PromptUser() 
{ 
char name[25]; 
cout << "Enter name: "; 
cin >> name; 

int grade(0); 
cout << "Enter grade: "; 
cin >> grade; 

double gpa(0.0); 
cout << "Enter gpa: "; 
cin >> gpa; 

Player result(name, grade, gpa); 
return result; 
} 
+0

'Sport.h'를 포함하지 않았습니다. – Ayjay

답변

3

. 그 물체는 즉시 파괴되고 당신은 잘못된 물체를 가리 키도록 남을 것입니다. 어떻게 든 영구 물체를 만들어야합니다. 예 :

temp[length] = new Player(PromptUser()); 

그냥 삭제하는 것을 잊지 마세요.

더 나은 점은 이처럼 원시 배열을 사용하지 마십시오. std :: vector와 같은 컨테이너를 사용하십시오.