2017-04-16 4 views
0

그래서 채플 문제가 있습니다. 알아낼 수 없습니다. 크기를 설정할 수있는 대기열이 있습니다. 유일한 것은 크기를 설정하고 대기열을 0으로 묶는 것입니다 (이는 의미가 있습니다). 나는 숫자 값보다는 널 값으로 큐를 채우려고하므로 나중에 큐가 널인지 확인할 수있는 add 메소드를 사용할 때 체크한다. 모든 것이 어떻게 설정되어 있는지 이미지를 첨부했습니다. 너희들에게지도 나 생각이 있다면 알려줘. 내가지고있어 오류는 다음과 같습니다eltType에 nil 값을 채우십시오.

오류 : 문자열에서 할당의 형식이 일치하지 int로 (64)

내가 여기 길을 잘못하고 있어야합니다.

enter image description here

답변

4

당신이보고있는 오류는 라인에 관한 것입니다 :

elements[i] = 'nil'; 

'nil' 문자열뿐 아니라 nil 어떤 따옴표없이으로 기록 된 전무 값입니다. int (64) 배열의 슬롯에 문자열을 할당하면 컴파일러에서 오류가 발생합니다.

예배당에서만 클래스는 0 값을 가질 수 있으므로 elements 배열의 어떤 위치가 채워지는지 추적하는 다른 방법을 사용해야합니다.

이렇게하는 한 가지 방법은 올바른 값을 포함하는 첫 번째 및 마지막 위치를 추적하는 두 개의 새 정수를 클래스에 추가하는 것입니다. 대기열에 값을 추가하면 last 위치가 증가하고 값을 제거하면 first 위치가 증가합니다. 이러한 값 중 하나가 배열의 끝을 지나치면 다시 앞쪽으로 줄 바꿈됩니다. lastfirst을 잡지 못하면 배열이 꽉 찼습니다. firstlast을 포착하면 배열이 비어 있습니다.

내가 코드를 수정해야한다고 생각 몇 가지 다른 사항은 다음과 같습니다

  • use semaphore.chpl; 사용 문은 모듈 이름이 아닌 파일 이름과 함께 작동, 그래서 이것은 아마 use semaphore;을해야합니다. 내가 여기 당신의 의도를 이해하고있어 경우

  • 이 코드는 5

    var elementsDomain: domain(1); 
    var elements: [elementsDomain] eltType = 5; 
    
    배열의 도메인이 배열의 크기를 제어

    elements 배열의 크기를 설정하려고, 그래서 방식 배열 크기 도메인 통해 설정 :

    var elementsDomain: domain(1) = {0..#5}; 
    var elements: [elementsDomain] eltType; 
    
  • elementsDomain = (0..capacity - 1);

    범위는 리터럴 값 elementsDomain 설정된다. 도메인이 1 차원이기 때문에 작동하지만 더 명확하게하려면 {0..capacity - 1} 대신 도메인 리터럴 값으로 설정할 수 있습니다.