2017-01-06 2 views
-1

Я пытаюсь реализовать этот шаблон оператор специализациишаблона оператор специализация с =

template <class T> 
class test 
{ 
public: 
    T value; 
}; 


template <> test &test::operator=<std::string>(const char *rhs) 
{ return *this;} 

Но с г ++, я получаю эту ошибку:

error: invalid use of template-name 'test' without an argument list template <> test &test::operator=(const char *rhs) ^~~~

+1

Предоставьте [mcve]. Кроме того, сообщение об ошибке подчеркивает именно проблемный код. – Barry

+0

Перед специализацией вам требуется объявление основного шаблона. – songyuanyao

+0

Хорошо, теперь он минимальный, полный и поддающийся проверке! – Stef

ответ

0

Кажется, вы просто поместил шаблон параметр в неправильном месте. Шаблонный класс нуждается в аргументах шаблона за пределами его области видимости, поэтому в этом случае возвращаемый тип также нуждается в аргументах шаблона.

template<class T> 
class test 
{ 
public: 
    test & operator=(const char * rhs) { 
     return *this; 
    } 
}; 

template<> test<std::string> & test<std::string>::operator=(const char * rhs) { 
// type goes here ^^^^^^^^^ and here ^^^^^^^^^^ 
    return *this; 
} 
+0

Да, это работает ... Но я не понимаю, почему я получаю downvotes!? – Stef

+0

@Stef люди опроса, которые не предоставляют [краткие компилятивные примеры] (http://stackoverflow.com/help/mcve). Ваш пример не компилируется. Если вы копируете/вставляете его непосредственно в пустой файл, единственными ошибками компилятора должны быть те, о которых спрашивает вопрос. –

+1

@Stef: Вы никогда не определяли базовую функцию, так как вы ожидали ее специализации? – AndyG

Смежные вопросы