2017-10-31 6 views
0

Gobo 컴파일러와 도구를 사용하여 프로젝트를 컴파일하려고하는데 (this SO question 참조) 표준 라이브러리 equal(..)을 참조하는 오류 메시지가 나타납니다. 그 오류가 어딘가에 표준 라이브러리가 아니라 코드에서 어딘가에 있지만 나는 더 많은 정보를 얻는 방법을 모르겠다 geant. 내 코드에서 어떤 클래스, 함수, 코드 줄이 equal(..) 또는 다른 표준 라이브러리 함수를 호출했는지 알고 싶습니다. 그리고 네, 이미 내 코드에서 equal(..)을 모두 통과하려고했습니다. 내가 할지오멘트에서 스택 추적 받기

오류 메시지는 다음과 같습니다

[야유는] 클래스 SQL_GENERATOR_TSQL65 (ANY, 95.8) : 실제 인수 1 유형 'STRING_8는'형식의 'UC_STRING'을 입력 일치하지 않습니다 library\free_elks\src\elks\kernel\any.e에 기능에 인수 '클래스'`is_equal UC_STRING '

이 점 :

frozen equal (a: detachable ANY; b: like a): BOOLEAN 
     -- Are `a' and `b' either both void or attached 
     -- to objects considered equal? 
    do 
     if a = Void then 
      Result := b = Void 
     else 
      Result := b /= Void and then 
         a.is_equal (b) -- <<<<<<< THIS LINE 
     end 
    ensure 
     definition: Result = (a = Void and b = Void) or else 
        ((a /= Void and b /= Void) and then 
        a.is_equal (b)) 
    end 

답변

1

보고 CAT-호출 시스템 오류입니다 (즉, 클래스 에러와는 대조적으로), 즉 전체 시스템 분석의 결과로서 나타난다. UC_STRING 클래스는 is_equal 기능을 다시 정의합니다. 따라서 UC_STRING (또는 그 자손) 유형의 인수에만 사용할 수 있습니다.

일부 코드는 을 STRING_8 (UC_STRINGSTRING_8에서 상속 받음)으로 처리합니다. UC_STRINGSTRING_8 유형의 엔티티에 연결되면 코드는 CAT 호출을받을 위험이 있습니다.

s: STRING_8 
t: STRING_8 
u: UC_STRING 
... 
s := u 
if equal (s, t) then ... 

당신이 UC_STRING의 인스턴스에 is_equal를 호출을 언급 equal의 코드 만 인수로 STRING_8를 수신 예를 들면 다음과 같습니다. 그러나 is_equal 버전이 UC_STRING 인 경우 STRING_8이 아닌 UC_STRING 만 인수로 처리 할 수 ​​있습니다. 그래서 오류가 발생합니다.

문제는 STRING_8

  • STRING_8
  • 고양이 호출 오류
  • 해제에 UC_STRING의 모든 재 유착을 제거 받아 UC_STRINGis_equal의 인수 유형을 변경

    • 에 의해 해결 될 수있다

      마지막 하나가 귀하의 케이스에서 가장 좋은 것 같습니다.