2011-10-06 8 views
1

QList를 QSet으로 변환하려고하면이 오류가 발생합니다.오버로드 된 'qHash (const double &)'호출이 모호합니다.

QList<double> x_pts; 
x_pts << 4.1; 
x_pts << 2.2; 
x_pts << 2.2; 
x_pts << 1.3; 
qSort(x_pts); 
QSet<double> list = x_pts.toSet(); 

이 오류가 발생하는 이유는 무엇입니까? 내가 int 또는 double * 형식으로 변경하면 잘 작동합니다. 하지만 이중에서도 잘 작동합니다.

내가 원하는 것은 내 목록에서 중복 된 항목을 제거하는 것입니다. 내가 직접 목록을 반복하지 않고 그것을 할 수있는 방법을 찾고 싶다.

이 오류를 제거하거나 중복을 제거하는 다른 기능에 도움을 주시면 감사하겠습니다.

덕분

+2

정확한 컴파일러 메시지를 제공 할 수 있습니까? – crazyjul

+1

플랫폼과 Qt 버전도 함께 제공 할 수 있습니까? 이것은 Qt 버그처럼 보입니다. – pmr

답변

4

컴파일러 에러 Qt는 단순히 두 번에 걸리는 qHash() 함수를 정의하지 않은 때문이다 러쉬. 그 이유는 일반적으로 해시에서 키로 부동 소수점 숫자를 사용하는 것은 나쁜 생각입니다 (이 경우 QSet은 내부적으로 해시를 사용합니다).

중복을 제거하려고하지만 C++에서는 부동 소수점 숫자 간의 평등이라는 개념이 흐릿하다고 말하면 두 부동 소수점 숫자가 진정으로 동일하다고 말하는 것은 어렵습니다.

A)) 소수점 숫자를

B 부동 사용 자신의 qHash 함수를 정의하지 마십시오가 만족 :

문제에 대한 해결책 중 하나가 될 것입니다

을 (the C++ faq regarding this subject 참조) 만족스러운 방식으로 프로그램의 요구 사항을 충족해야합니다. 암시 파일에 qHash(double)을 정의하면 충분합니다.

관련 문제