2017-11-13 1 views
0

나의 현재 과제에서 나는이 특정 데이터에 어떻게 접근 할 수 있는지 알아 내는데 어려움을 겪고있다.큐 포인터를 통해 노드에 저장된 클래스의 데이터에 어떻게 액세스합니까?

시작하려면 파일에서 데이터를 가져 와서 정상적으로 작동하는 상점을 시뮬레이트해야합니다. 유일한 문제는 가져온 데이터가 고객에 관한 것입니다. 특히 고객이 대기열에 들어서고 계산원이 주문을 처리하는 데 걸리는 시간입니다.

지금 고객 데이터를 클래스 배열에 저장하는 방법은 다음과 같습니다.

for(int i = 0; i < entries; i++) 
{ 
    /* !!!!!IMPORTANT!!!!! 
    * The way this program extracts file data assumes that the file will 
follow a specific format 
    * results will vary heavily based on how the file is set up 
    * 
    * before docking points please make sure that the file follows the format 
    * 
    * "Number of entries" 
    * "Customer Number", "Arrival Time", "Service Time" 
    * "Customer Number", "Arrival Time", "Service Time" 
    * "Customer Number", "Arrival Time", "Service Time" 
    */ 

    xfiles >> dataEntry; 
    fileData[i].setNumber(dataEntry); 
    //inserts a number from the file into the "number" variable in the customer class. 
    xfiles >> dataEntry; 
    fileData[i].setArrival(dataEntry); 
    //inserts a number from the file into the "arrival" variable in the customer class. 
    xfiles >> dataEntry; 
    fileData[i].setServTime(dataEntry); 
    //inserts a number from the file into the "servTime" variable in the customer class. 
} 

xfiles.close(); 

코드에는 포함되어 있지 않지만 프로그램 초기에 입력 한 내용이 고려되어 있습니다.

다음 블록에서는 일정 기간 동안 동시에 고객을 대기열에 넣고 처리해야합니다. 나는 그들을 대기열에 넣기 위해 어떻게해야하는지에 대해 생각해 봤지만 어떻게 처리해야하는지 잘 모르겠습니다. 지금 내가 아는 한, 배열의 특정 고객이 대기열에 있는지 여부를 확인하기 위해 조건문을 수행하고 싶을 수도 있습니다.

현재 액세스하려는 데이터 조각은 클래스에 저장된 도착 시간입니다.

다음과 같이 표시됩니다.
fileData [i] .returnArrival();

이 클래스는 대기열에 저장되어 있으므로 액세스 할 수있는 방법이 확실하지 않습니다.

는 지금 내가 모든 것을 대기 얼마나

for(int x = 0; x < 570; x++) 
{ 
    if(cusTime == x) 
    { 
    if(scully.isFull() = false) 
     scully.enqueue(fileData[cusTime]); 
    else if(mulder.isFull() = false) 
     mulder.enqueue(fileData[cusTime]); 
    else if(skinner.isFull() = false) 
     skinner.enqueue(fileData[cusTime]); 
    else 
     cout << "queues are full, disposing..\n"; 
    } 
    cusTime++; 
} 

가 처음에 나는 그것이

scully.returnFront()->temp->returnClass()->fileData.returnArrival(); 

같은 것이라고 생각이다 하지만 온도가 내에서 선언 된 포인터 만 이후에 대해 확실 해요 큐 클래스.

내 친구가 제안한 제안이 있었는데, 아마도 그 대신에 이런 것이있을 것이라고 제안했지만, 코드를 실행할 때 세분화 오류가 발생했습니다.

scully.returnFront()->returnClass().returnArrival(); 

답변

0

교수 및 TA와 약간 논의한 후 문제의 원인은 리턴 프론트 기능이 포인터를 반환하여 노드 내 데이터에 액세스하는 것을 더 어렵게 만드는 것이 었습니다. 해결책은 리턴 프론트 함수가 데이터와 연관된 클래스를 리턴하고 리턴 명령문이 노드에 저장된 클래스를 리턴하는 클래스 함수를 가리키는 포인터를 리턴하도록하는 것이 었습니다.

return front; 

return front->returnClass(); 

너무

Node *returnFront(); 

함수 내의

Customer returnFront(); 

변화로 변경했다

이러한 변경으로 인해 주 파일 내부에서 Customer 클래스 데이터에 쉽게 액세스 할 수있었습니다. 그래서 클래스의 변수를 담는 새로운 인스턴스를 생성 할 수있었습니다.

Customer scullyTemp; 

그런 다음 할당 문을 통해 노드에 저장된 클래스 내부의 데이터를 저장합니다.

scullyTemp = scully.returnFront(); 
scullyTemp.returnArrival(); 

좀 더 복잡 할 수도 있지만, 지금은 내가 필요한 것을 수행합니다.

1

나는이 다음을해야한다고 생각 :

scully.returnFront().returnArrival() 

것은 당신이 당신의 배열에서 항목을 대기열 때문입니다. 따라서 returnFront()는 메소드가 가능해야하는 항목을 검색합니다.

+0

수업에서 집에 돌아 왔을 때 시험해 볼 것이지만 실제로 그렇게 할 수 있을까요? Front는 큐 클래스 내의 포인터입니다. 그래서 적어도 뭔가를 가리켜 야합니다. –

+1

returnFront가 객체에 대한 포인터를 반환한다면'scully.returnFront() -> returnArrival()'을 사용해야합니다. –

관련 문제