2016-07-25 2 views
0

Рассмотрим код:Почему явное создание экземпляра в специализации шаблона дает мне ошибку?

... 
template <typename T> 
void Swap(T &,T &); 
template <> void Swap<structEmployee>(structEmployee &,structEmployee &); 
int main() 
{ 
template void Swap<char>(char &,char &); 
short a=10,b=20; 
... 
Swap(a,b); 
... 
... 
} 

Это дает мне ошибку:

expected primary-expression before ‘template’ 
template void Swap<char>(char &, char &); 
+0

Похож на XY-проблему. Чего вы хотите добиться именно? – skypjack

ответ

0

Вы не можете создать экземпляр шаблона в блоке рамки, он должен быть в глобальном масштабе:

//Instantiation in global scope 
template void Swap<char>(char &,char &); 

int main() 
//... 
+0

Но я пытаюсь для явного создания экземпляра, и это правильный синтаксис - шаблон void Swap (char &, char &). То, о чем вы говорите, это «явная специализация», и это не так. Просьба сослаться на это: http://stackoverflow.com/questions/4933056/how-do-i-explicitly-instantiate-a-template-function – dlp96

+0

@ dlp96 Так что извините, не видел этой детали. Я отредактировал свой ответ – Rakete1111

+0

После создания экземпляра в глобальной области, он снова дает мне эту ошибку: «ошибка: явная инстанция« void Swap (T &, T &) [с T = char] », но определение не доступно [-fpermissive] '. Я определил 'template void Swap (T & a, T & b) {...}' после функции 'main', но он дает мне эту ошибку. – dlp96