는 나는이 당신이 뭐가 잘못 무언가를 제안 할 수 행한 '() 가상 JumpState Jump_peg :: 초기화' 이 오류 무효 공변 반환 형식을 얻고있다 (매개 변수는 상속)? 나는 코드의 의도는 getNext
, init
, solve
및 print
모두에서 재정의되는 것을 상상 공공 주무효 공변 반환 형식
0
A
답변
1
포인터 또는 참조를 반환 할 때 공변 반환 형식이 작동하지만 클래스 개체는 반환하지 않습니다. 따라서
virtual State& init();
이 적용됩니다. 불행하게도, 더 큰 문제는
virtual vector<State> getNext(State);
및
vector<JumpState> getNext(JumpState);
완전히 관련이없는 기능이 있다는 것입니다. 후자는 전자를 무시하지 않습니다.
State
을 허용하는 다른 모든 함수 쌍에서도 마찬가지입니다. 재정의하려면 매개 변수 유형이 동일해야합니다.
실제로이 필요하게 될 수 있습니다`Jump_peg`이 문제를 해결해야하기 전에
template <class State> class Puzzle { ..
class Jump_peg : public Puzzle<JumpState> { ...
2
:
class Puzzle{
public:
virtual vector<State> getNext(State) = 0;
virtual State init() = 0;
virtual bool solved(State) = 0;
virtual void print(State) = 0;
};
class Jump_peg:public Puzzle{
private:
int size;
public:
vector<JumpState> getNext(JumpState);
JumpState init();
bool solved(JumpState);
void print(JumpState);
void jump(JumpState,int,int,vector<JumpState>&);
};
내 코드 jumpstate에서
상태에서클래스 JumpState을 상속 파생 된 유형이지만, 다른 이유로 이러한 경우는 아닙니다.
init
의 경우 인수가 없으므로 컴파일러는 함수의 기본 설정을 동일한 이름으로 재정의하려는 것으로 해석합니다. C++은 가 리턴 타입 중 하나 포인터 또는 참조 것을 제공 (기지의 함수에 의해 리턴 된 형태의 파생 형태 일 수 overrider의 복귀 형) 공동 변형 유형을 허용하지만 아니 값입니다. 파생 된 타입에서 선언 solved
print
및 기능의 경우
비록 변이가 허용된다하더라도, 공 편차는 파생 된 유형의 함수 계약을 축소 할 것이므로 반 편차이어야합니다. 모두State
이지만 파생 유형은 JumpState
만 사용할 수 있습니다. 파생 된 유형은 기초 대신에 대체 가능하지 않으며 Liskov 대체 원칙을 위반합니다. 유형 vector<State>
및 vector<JumpState>
이 경우에도 State
및 JumpState
은 상속으로 관련이없는 getNext
의 경우 있도록
는 또한, 다른 템플릿 인스턴스화는 상관없이 템플릿 인수의 관계가 무엇인지 관련이없는 유형이다.
관련 문제
- 1. [C++] 공변 반환 형식
- 2. Java의 공변 반환 형식
- 3. 루비 대신 무효 반환 형식
- 4. 공변 반환 형식 및 정적 클래스
- 5. 공변 반환 형식, CONST 네스, 불완전한 클래스
- 6. 공변 반환 형식 내가이 간단한 프로그램에 의해 혼란 스러워요
- 7. 오류 C2440 : '형식 캐스트': '무효 (__cdecl *) (무효)'
- 8. 무효 및 반환 유형
- 9. 의 malloc 반환 무효
- 10. 문 반환 무효 출력
- 11. 복제본의 공변 반환 형식을 사용하면 호환성이 깨지겠습니까?
- 12. 메서드 반환 형식 공분산
- 13. shared_ptr을 반환 할 때 공변 반환 형식을 수행하는 방법은 무엇입니까?
- 14. 포인터가있는 C++ 무효 반환 유형
- 15. 일반 반환 형식 - Java
- 16. 공변 수집
- 17. 벡터 반환 (반환 형식)
- 18. 다중 가상 함수가있는 순수 가상 함수 오버로드 및 공변 반환 형식
- 19. C++ 다중 상속, 가상 메서드 대체 문제 및 공변 반환 형식
- 20. 반환 형식
- 21. 반환 형식
- 22. EL와 공변 리턴 유형
- 23. 의 인스턴스에서 공변 형 클래스의 인스턴스를 생성 비 공변 한
- 24. Spring의 @CachePut 주석은 무효 반환 형식으로 작동합니까?
- 25. 강제 오류는 다음과 같은 코드로 무효 반환
- 26. 팩토리 메서드 패턴에 대해 무효 반환
- 27. 두 명령문의 나노초 차이는 무엇입니까? (무효 반환)
- 28. 비 무효 메소드 호출의 반환 값
- 29. Java/Android Studio - 공변 반환 형식 - "basclass"의 메서드와 "baseclass"의 메서드가 충돌합니다. 호환되지 않는 반환 형식을 사용하려고 시도합니다.
- 30. 클로저 컴파일러의 반환 무효 반환 사이의 정의되지 않음
앞으로'JumpState'을 선언합니다. – billz
@billz : 아니요. 그건 도움이되지 않습니다. –