당신이보고있는 오류는 라인에 관한 것입니다 :
elements[i] = 'nil';
'nil'
문자열뿐 아니라 nil
어떤 따옴표없이으로 기록 된 전무 값입니다. int (64) 배열의 슬롯에 문자열을 할당하면 컴파일러에서 오류가 발생합니다.
예배당에서만 클래스는 0 값을 가질 수 있으므로 elements
배열의 어떤 위치가 채워지는지 추적하는 다른 방법을 사용해야합니다.
이렇게하는 한 가지 방법은 올바른 값을 포함하는 첫 번째 및 마지막 위치를 추적하는 두 개의 새 정수를 클래스에 추가하는 것입니다. 대기열에 값을 추가하면 last
위치가 증가하고 값을 제거하면 first
위치가 증가합니다. 이러한 값 중 하나가 배열의 끝을 지나치면 다시 앞쪽으로 줄 바꿈됩니다. last
이 first
을 잡지 못하면 배열이 꽉 찼습니다. first
이 last
을 포착하면 배열이 비어 있습니다.
내가 코드를 수정해야한다고 생각 몇 가지 다른 사항은 다음과 같습니다
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}
대신 도메인 리터럴 값으로 설정할 수 있습니다.