오류, 버그, 질문 - 페이지 1639

 

어떤 이유로 템플릿 클래스의 템플릿 메서드를 컴파일러에서 찾지 못하고 오류가 발생했을 때 지금 누가 어떤 방식으로 문제를 해결하고 있습니까?

no one of overloads can be applied to the function call

?

이러한 경우 Sish 컴파일러는 대체된 유형과 프로토타입이 발견되지 않은 기능을 구체적으로 작성하므로 문제가 무엇인지 다소 명확하지만 여기에는 구체적이지 않습니다.

 
Ilyas :
이것은 직접 상속에 문제가 없기 때문에 의식적으로 수행되었습니다.

정확한 규칙을 알고 싶습니다. 어떤 경우에 다른 반환 유형 으로 가상 함수를 재정의할 수 있는 권한이 있습니까?

아니면 과부하입니까?

 
Koldun Zloy :

정확한 규칙을 알고 싶습니다. 어떤 경우에 다른 반환 유형 으로 가상 함수를 재정의할 수 있는 권한이 있습니까?

클래스 개체에 대한 포인터를 반환할 때 재정의된 함수의 반환 형식이 재정의된 함수가 반환하는 형식에서 상속되는 경우(다중 상속의 첫 번째 부모이지만 MQL에서는 아직 지원되지 않음)인 경우가 한 번뿐입니다.
 

고맙습니다. 공습 경보 해제.

 
Ilyas :
.. 재정의된 함수의 반환 형식이 상속된 경우 ... 재정의된 함수가 반환하는 형식에서.

그 반대라면?

 class A {};
class B : public A {};
class C {
         virtual B *f() { return NULL ; }
};
class D {
         virtual A *f() { return NULL ; } //нормально
};
 
A100 :

그 반대라면?

예제에 오류가 있습니다. C에서 D를 상속받지 않습니다.
 
Ilyas :
예제에 오류가 있습니다. C에서 D를 상속받지 않습니다.

예, 제가 잘못했습니다. 죄송합니다.

 class A {};
class B : A {};
class C {
         virtual B *f() { return NULL ; }
};
class D : C {
        virtual A *f() { return NULL ; } //Error: overriding virtual function with different return type
};
 

또 다른 논란의 예:

 class C;
class A {
         virtual A *f() { return NULL ; }
};
class B : A {
         virtual C *f() { return NULL ; } //Error: overriding virtual function with different return type
};
class C : B {
         virtual C *f() { return NULL ; } //нормально
};
 
A100 :

또 다른 논란의 예:

오류에도 불구하고(실행 파일 생성이 없기 때문에) 함수 B::f는 A::f를 재정의하므로 C::f에 대한 재정의 오류는 없습니다.
 
Ilyas :
오류에도 불구하고(실행 파일의 생성이 없기 때문에) 함수 B::f는 A::f를 재정의하므로 C::f에 대한 재정의 오류는 없습니다.

요점을 잘 이해하지 못했지만 거의 동일합니다.

 class C;
class A {
         virtual A *f() { return NULL ; }
};
class B : A {
         virtual C *f() { return NULL ; } //Error: overriding virtual function with different return type
};
class C : A {};
class C;
class A {
         virtual A *f() { return NULL ; }
};
class C : A {};
class B : A {
         virtual C *f() { return NULL ; } //нормально
};
한 경우에는 틀리고 다른 경우에는 그렇지 않습니다. 라인만 바꿨어요