Несогласованная ошибка при использовании шаблонных функций - PullRequest
0 голосов
/ 04 февраля 2011

(Этот вопрос имеет щедрость для всех, кто хочет сделать снимок)

Привет! Я определил функцию перегрузки шаблона с классом контейнера в качестве аргументов

(Здесь CntrlCls1 = RWTValOrderedVector и CntrlCls2 = RWTPtrSortedVector )

template<Class X> void func(CntrCls1<X>* ){}

template<Class X> void func(CntrCls1<X*>* ){}

template<Class X> void func(CntrCls2<X>*){}

После определения я вызываю функцию следующим образом

func(&ABC);

, где ABC - это экземпляр типа CntrCls1 <*> (то есть это контейнер указателей)

Теперь это прекрасно компилируется на моем компьютере, но когда я компилирую в другой системе, по какой-то причине компилятор пытается создать экземпляр шаблона функции с помощьюПараметр CntrlCls2, в результате чего выдается ошибка.

CtrCls1 и CtrCls2 являются несвязанными контейнерами.

Обновление: я использую VS 2008 для сборки на обеих системах, так что это не должно бытьпроблема.

Update1: я пытался перекомпилировать после комментирования шаблона функции с параметром CtrCls2 Теперь компиляция пытается создать первый функционал(т.е. без указателей): - (

1 Ответ

0 голосов
/ 12 февраля 2011

1) Проверьте пакеты обновления для установленного VS 2008. Версии компилятора на машинах могут отличаться, что приводит к разным результатам.

2) Попробуйте использовать ключевое слово typename вместо "class" в объявлении шаблона.

И, кстати. Из кода, который я вижу, вы используете указатели для значений контейнера sorted . Сортированные контейнеры ожидают найти сравнение как

template<T> bool operator<(const T&left, const T&right);

Поскольку RWTValOrderedVector и RWTPtrSortedVector выглядят как контейнеры, которые содержат значения в отсортированном порядке, они должны использовать такой оператор сравнения. НО, для типов указателей оператор <сравнивает их адреса, а не объект, на который они указывают. Таким образом, хранение указателей в упорядоченном контейнере даст вам набор отсортированных указателей, а не набор указателей на отсортированные объекты. Просто к вашему сведению. </p>

...