Qt 4.2.0/VS2005 SP1 문제 해결

윈도 비스타에서는 어쩔 수 없이 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; }

파란색 부분을 지우고 빨간색 부분으로 바꾸기 바란다. 그 결과 해결되는 척 하였다.