2013-09-05 4 views
0

В следующем коде компилятор показывает ошибку во второй строке, а если я не использую класс шаблона и явно определяю V, то он отлично работает.Ошибка: ожидаемый ')' перед '&' token

template <class T,template <class T> class V> 
void struct inp<T, V >::input(ifstream& in, V<T> lst) 
+8

пустота * * структура!?! ты уверен в этом? – Borgleader

+2

В C++ не нужно класть struct перед именем структуры, как в C – xorguy

+0

Вы '#include ' и 'use namespace std;'? Компилятор просто не знает, что 'ifstream' - это имя типа; все остальное - красная сельдь. –

ответ

2

Вы не можете иметь как voidиstruct в вашем объявлении шаблона. Вы говорите о шаблонной функции или шаблоном? И вы, вероятно, хотите, чтобы const ref ссылался на ifstream и, по крайней мере, на не-const ссылался на ваш шаблонный шаблон parmater. Вы хотите, либо класс:

template <class T,template <class T> class V> 
struct inp<T, V >::input(const ifstream& in, V<T>& lst) 

или функции:

template <class T,template <class T> class V> 
void inp<T, V >::input(const ifstream& in, V<T>& lst) 
+1

Я совершенно не понимаю, как первый из них - даже вариант. У вас не может быть просто 'struct' как *** возвращаемый тип ***. Второе, однако, вполне возможно. – WhozCraig

+1

Возможно, вы * не хотите иметь ссылку 'ifstream' ** const **, потому что тогда вы не могли ее прочитать. – dyp

+0

@WhozCraig ok у вас может быть функция, возвращающая 'struct', но вы не заявляете ее так. –