는 Qt는 글로벌 네임 스페이스의 열거 연산자를두고 할 대신 Qt
네임 스페이스가 있어야합니다. 현재 네임 스페이스에서 일치하는 다른 연산자가 있으면 컴파일러 will not search the parent scopes입니다. 네임 스페이스에 연산자에 대한 과부하를 추가하자마자 Qt의 오버로드는 일치 집합에 포함되지 않습니다. >QFlag
- ->QFlags
int
: 그것은 두 암시 적 변환을 필요로하기 때문에 2
Fèlix's answer below도 유효하지 않습니다. 비주얼 C++는 인해 long-standing bug에 동의하지만 대부분의 컴파일러는 그것을 거부합니다 : 모든 컴파일러에이 작동
error: no viable conversion from 'unsigned int' to 'Qt::WindowFlags'
(aka 'QFlags<Qt::WindowType>')
Qt::WindowFlags f = Qt::CustomizeWindowHint | Qt::WindowTitleHint;
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
을 : 하나의 변환이 필요합니다
Qt::WindowFlags f(Qt::CustomizeWindowHint | Qt::WindowTitleHint);
때문에 : int
->QFlag
합니다.
실제 해결책은 Qt가 조작자를 조작하는 유형과 동일한 네임 스페이스에 넣는 것입니다. 한편, 당신은 사업자 스스로를 가져올 수 있습니다 :이 의도하지 않은 결과를 초래할 수 있습니다
using ::operator|;
setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint);
하는 것으로, 당신은 그들이 안 컨텍스트에서 사용할 수있는 이름을 많이하게 될 수있다.
1line 1733의 폐쇄 브래킷 line 58에 연 namespace Qt
을 종료한다.
2ADL는 일반적으로 유형과 같은 네임 스페이스에 선언 연산자를 해결하는 데 사용되지만 운영자가 다른 네임 스페이스에있는 경우이 작동하지 않습니다.
자세한 설명을 보내 주셔서 감사합니다. –