Параметры шаблона по умолчанию? - PullRequest
2 голосов
/ 04 октября 2011

В настоящее время я пытаюсь заставить старый проект в C ++ работать с более новыми инструментами: проект был разработан на Windows XP с VC71, и сейчас я пытаюсь заставить его работать на Windows 7 с VC100.

У меня еще не было "большой" проблемы, но, тем не менее, у меня возникла последняя проблема с компиляцией, которая привела меня к некоторому коду - довольно неясному для меня.макроса (упрощенно) У меня проблемы с:

#define IMPORT_STD_PAIR( _keyClass_ ,_objectClass_)               \
 extern template struct std::pair< _keyClass_,_objectClass_ >;    \
 ...

Ошибка:

C2955: 'std::allocator' : use of class template requires template argument list.

Я не совсем понимаю, что он должен делать (2-я строка), указать параметры по умолчанию для шаблонного класса?

Спасибо за помощь.

Редактировать: @Mark B: Спасибо за ваш ответ.Вы заставили меня понять, что происходит: ничего.

На самом деле, это моя вина, потому что я совсем не знаком с разработкой в ​​Windows.Код был изначально:

#define IMPORT_STD_MAP( _import_directive_, _keyClass_ ,_objectClass_) \
  extern template struct _import_directive_ std::pair<_keyClass_,_objectClass_>;    

Я пренебрег _import_directive_, потому что он был почти «пустым» в каждом случае, кроме одного.Поэтому, когда он пуст, он просто создает экземпляр без имени, который на самом деле не имеет значения;но когда этот макрос принимает значение __declspec ( dllimport ), это имеет гораздо больше смысла:)

Спасибо, что помогли мне понять это, я подумал, что это нечто более экзотическое, и спасибо за полезный совет по отладке.

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Похоже, ListRemake это шаблонный класс, и вы пытаетесь создать экземпляр экземпляра как

ListRemake myList;

Вам необходимо указать аргументы шаблона для ListRemake

ListRemake<int, long> myList;
0 голосов
/ 04 октября 2011

Похоже, что он пытается создать конкретный экземпляр std::pair.Без большего контекста я не могу понять, почему это будет предпринято, но вы могли бы попытаться просто заставить макрос ничего не определять и посмотреть, компилируется ли код, ссылки и кажется, что он работает.Возможно, они изменили компиляцию шаблона в 10.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...