윈도 비스타에서는 어쩔 수 없이 VS2005 SP1을 사용해야 한다. 그런데 윈도 비스타에서 VS2005 SP1을 사용하여 아마 QMap/QHash가 들어간 프로그램을 컴파일하는데 오류가 생겼다. 다행히토 트롤텍은 둘러가기 패치를 제공하고 있었지만, 이마저도 듣지 않았다. 그래서 이 문제 가지고 MSDN과 각종 Qt 포럼이 아직도 들썩대고 있다.
그런데 그 둘러가기 패치의 코드와 내가 가지고 있는 Qt의 문제성 헤더의 줄 번호가 약간씩 차이가 났다. 그리고 둘러가기 패치는 그 주변 코드를 알 수가 없어서 뭐가 문젠지 알아내는 데 시간이 좀 걸렸다. 실제로 내가 적용시킨 것은 다음과 같다.
<QHash.h>
일단 390줄 부근에서 찾기 바란다.
private:
// ### Qt 5: remove
inline operator bool() const { return false; }
};
friend class const_iterator;
typedef typename QHash<Key, T>::iterator DummyHashIterator;
// STL style
inline iterator begin() { detach(); return iterator(d->firstNode()); }
inline const_iterator begin() const { return const_iterator(d->firstNode()); }
그리고 한 890줄 부근에 있다.
public:
QMultiHash() {}
QMultiHash(const QHash<Key, T> &other) : QHash<Key, T>(other) {}
inline typename QHash<Key, T>::iterator replace(const Key &key, const T &value);
inline typename QHash<Key, T>::iterator insert(const Key &key, const T &value);
inline typename DummyHashIterator replace(const Key &key, const T &value);
inline typename DummyHashIterator insert(const Key &key, const T &value);
inline QMultiHash &operator+=(const QMultiHash &other)
{ unite(other); return *this; }
파란색 부분을 찾은 다음 지우고 빨간색으로 바꾸면 된다.
<QMap.h>
310줄 부근에서 찾기 바란다.
private:
// ### Qt 5: remove
inline operator bool() const { return false; }
};
friend class const_iterator;
typedef typename QMap<Key, T>::iterator DummyMapIterator;
// STL style
inline iterator begin() { detach(); return iterator(e->forward[0]); }
inline const_iterator begin() const { return const_iterator(e->forward[0]); }
그리고 한 890줄 부근에 있다.
public:
QMultiMap() {}
QMultiMap(const QMap<Key, T> &other) : QMap<Key, T>(other) {}
inline typename QMap<Key, T>::iterator replace(const Key &key, const T &value);
inline typename QMap<Key, T>::iterator insert(const Key &key, const T &value);
inline typename DummyMapIterator replace(const Key &key, const T &value);
inline typename DummyMapIterator insert(const Key &key, const T &value);
inline QMultiMap &operator+=(const QMultiMap &other)
{ unite(other); return *this; }
파란색 부분을 지우고 빨간색 부분으로 바꾸기 바란다. 그 결과 해결되는 척 하였다.


요놈 간지. 당연히 Set up my device를 해야 겠지?
자 그러니까… peremen’s PDA라는 문구가 떠 주고 친절하게 동기화를 해 주고 있었다. 어차피 저 구린 휴대폰은 윈도 모바일 2003밖에 돌리지 못해서 USB 2.0은 안드로메다지만, 동기화하는 화면이 예뻐져서 용서해 준다.
게다가 윈도 비타스의 동기화 센터에서는 이제 반응하다니… 거참 ㅁㄴㅇㄹㅁㄴㅇㄹ스러운 윈도 비타스다. 결론은 낚이지 말고 윈도 모바일과 비타스를 동기화시키려면