2013-06-18 2 views
-1

, 나는 오류를 얻을 :호환되지 않는 유형 : 주석으로 'tValidPos'와 'TPOS'다음 코드에서

function ToPos : tValidPos; 
type 
    tPos  = (poAboveCenter , poAboveLeft , poAboveRight); 
    tValidPos = array [Low (tPos)..High (tPos)] of tPos; 
const 
    validPos : tValidPos = (poAboveRight, poAboveLeft, poAboveCenter); 
var 
    i, pos : tValidPos; 
begin 
    i := Low (validPos); // Incompatible types: 'tValidPos' and 'tPos' 
    pos := validPos [i]; // Incompatible types: 'Enumeration' and 'tValidPos' 
    Result := i; 
    for i := Low (validPos) to High (validPos) do 
    if validPos [i] = pos then begin 
     Result := validPos [i]; 
     Break; 
    end; 
end; 

내가

  1. i 때문에, 무엇이 잘못되었는지 알아낼 수 없습니다 및 validPos 동일 tValidPos
  2. pos는 적용 유형 모두와 validPos
있다3210

나는 아직도 얻을 pos [0] := validPos [i] 같은 괄호를 사용하는 경우 "호환되지 않는 유형을 '열거'와 'tValidPos'는"

는이 문제를 해결하기 위해 도와주세요.

+0

코드를 보면 당신이하려는 것을 상상하기가 어렵습니다. 당신이 그 코드로하고 싶은 것을 설명 할 수 있습니까? 또한 함수 결과 "tValidPos"는 어디에서 선언 되었습니까? –

+0

이전 질문 (삭제 한 질문)에서 내가 게시 한 코드가 의미가 없다고 설명했고, 질문 텍스트에 * 실제로 설명했던 내용을 설명해달라고 요청했습니다. 게시 한 코드에는 몇 가지 문제가 있지만 먼저 수행하려는 작업을 모르는 경우 문제를 해결하는 방법을 설명하기가 어렵습니다. 다시 한 번, 질문을 편집하고 코드가 수행해야 할 사항에 대한 설명을 제공하십시오. 그래서 우리는 당신이 대답을 찾는데 도움이 될 일에 대한 아이디어를 가지고 있습니다. –

+0

설명해 드리겠습니다 : 원래 함수는 tComboBox와 유효한 위치의 목록 을받습니다. 그 목록은 차례로 이 tPos의 배열 인 tValidPos입니다. tPos는 모든 가능한 위치를 나열하는 열거 자 입니다. 유효한 위치 목록은 다양합니다. 위치를 지정할 각 요소의 위치는 입니다. 함수는 각 tComboBox.ItemIndex에 대해 대응하는 tPos를 반환합니다. 코드를 단순화하기 위해 코드를 게시했지만 결국 나는 성공하지 못했다고 생각합니다. – user2383818

답변

-1

마지막으로 해결책을 찾았습니다. 참으로 아주 간단했습니다. 인덱스에 열거 배열을 서수 값을 사용하는 것이 가능하지 않기 때문에

상기 방법은 달성이 동시에 Succ 함수를 사용하여 다음 validPos 페치 tComboBox.ItemIndex 기반으로 반복하여이었다.

type tPos  = (po1, po2, po3, po4, po5, poNil); 
    tValidPos = array [Low (tPos)..High (tPos)] of tPos; 
const validPos : tValidPos = (po1, po4, poNil, poNil, poNil, poNil); 
......... 
function ToPos (const aComboBox: tComboBox; validPos: tValidPos) : tPos; 
var p, pos : tPos ; 
    i  : Byte; 
begin 
    p := Low (ValidPos); // initialize with first validPos 

    for i := 0 to aComboBox.ItemIndex do begin 
    pos := validPos [p]; // current validPos 

    if pos = poNil then begin // not validPos? 
     pos := Low (ValidPos); // first validPos 
     Break; 
    end; 

    if Succ (p) <= High (validPos) then // next p is in range? 
     p := Succ (p) // next validPos 
    else 
    begin 
     pos := Low (ValidPos); // first validPos 
     Break; 
    end; 
    end; 

    Result := pos; // return corresponding validPos 
end; 

하나 개의 제한이있다 : validPos 요소 tPos 같이 를 주문해야합니다.

참고 : 방금 "인덱싱"솔루션을 사용하지 않았으므로 누적 된 이유는 입니다. 좋은 생각을 준 후 실제 해결책이 나타났습니다.

1

i : = 낮음 (validPos); // 호환되지 않는 유형 : 'tValidPos'와 'TPOS'

i 배열이지만, 하나의 순서 값이 아닌 배열을 Low(validPos) 반환합니다. Hense 호환되지 않는 유형입니다.

pos : = validPos [i]; // 호환 유형 '열거'및 'tValidPos'

pos 또한 배열이지만 validPos[i] 단일 서수 값이 아닌 배열이다. Hense 호환되지 않는 유형입니다. 당신이 시도하고있는 무슨

이 들어 i, posResult 모두 tPos하지 tValidPos로 선언해야합니다.

+0

'i [0] : = validPos [0]; // 호환되지 않는 유형 : 'Enumeration'및 'tValidPos'' – user2383818

+0

이 과제에 어떤 문제가 있습니까? – user2383818

+0

@ user2383818 :'i'가 내가 제안한 것처럼 'tPos'로 변경했다면,'i'는 더 이상 배열이 아니기 때문에'i [0]'은 유효한 문장이 아니기 때문에 인덱스 할 수 없습니다 . 서수 값과 배열의 차이점을 이해하지 못한다면, 수행중인 작업을 중단하고 프로그래밍 기초에 대한 좋은 자습서를 읽어야합니다. –